Size: a a a

2021 March 20

DS

Dmitriy S in Yii Framework 3
Mihail
из кода вижу что можно создать несколько групп нулл
null - это отсутствие префикса, вместо этого с таким же успехом можно сделать
Group::create('', [
    //routes
])
источник

M

Mihail in Yii Framework 3
как себя поведёт система если написать
return [
       Group::create(null)
           ->pipe(FormatDataResponse1::class),
       Group::create(null)
           ->pipe(FormatDataResponse2::class)
   ]
источник

M

Mihail in Yii Framework 3
Dmitriy S
null - это отсутствие префикса, вместо этого с таким же успехом можно сделать
Group::create('', [
    //routes
])
это я понял
источник

DS

Dmitriy S in Yii Framework 3
Mihail
как себя поведёт система если написать
return [
       Group::create(null)
           ->pipe(FormatDataResponse1::class),
       Group::create(null)
           ->pipe(FormatDataResponse2::class)
   ]
Без роутов это бессмысленно
источник

M

Mihail in Yii Framework 3
я для примера привёл! ладно так
return [
       Group::create(null)
           ->pipe(FormatDataResponse1::class)
           ->routes([
               Group::create('/api')
                   ->pipe(FormatDataResponseAsJson::class)
                   ->pipe(AccessCheck::class)
                   ->routes([
                       Route::get('/post')
                           ->pipe(FormatDataResponsAsXml::class)
                           ->action([PostController::class, 'index']),
                       Route::post('/post')
                           ->action([PostController::class, 'add'])
                   ]),
           ]),
       Group::create(null)
           ->pipe(FormatDataResponse2::class)
           ->routes([
               Group::create('/api2')
                   ->pipe(FormatDataResponseAsJson::class)
                   ->pipe(AccessCheck::class)
                   ->routes([
                       Route::get('/post')
                           ->pipe(FormatDataResponsAsXml::class)
                           ->action([PostController::class, 'index']),
                       Route::post('/post')
                           ->action([PostController::class, 'add'])
                   ]),
           ]),
   ]
источник

M

Mihail in Yii Framework 3
или он собирает под каждый урл набор Middleware ?
источник

Д

Дмитрий in Yii Framework 3
надо урл как-то задать, уже потом на него навешивать всякое...
источник

DS

Dmitriy S in Yii Framework 3
Mihail
я для примера привёл! ладно так
return [
       Group::create(null)
           ->pipe(FormatDataResponse1::class)
           ->routes([
               Group::create('/api')
                   ->pipe(FormatDataResponseAsJson::class)
                   ->pipe(AccessCheck::class)
                   ->routes([
                       Route::get('/post')
                           ->pipe(FormatDataResponsAsXml::class)
                           ->action([PostController::class, 'index']),
                       Route::post('/post')
                           ->action([PostController::class, 'add'])
                   ]),
           ]),
       Group::create(null)
           ->pipe(FormatDataResponse2::class)
           ->routes([
               Group::create('/api2')
                   ->pipe(FormatDataResponseAsJson::class)
                   ->pipe(AccessCheck::class)
                   ->routes([
                       Route::get('/post')
                           ->pipe(FormatDataResponsAsXml::class)
                           ->action([PostController::class, 'index']),
                       Route::post('/post')
                           ->action([PostController::class, 'add'])
                   ]),
           ]),
   ]
Группа лишь обобщает одинаковый набор мидлтварей
Твой код будет работать аналогично следующему
return [
       Group::create(null)
           ->routes([
               Group::create('/api')
                   ->pipe(FormatDataResponseAsJson::class)
                   ->pipe(AccessCheck::class)
                   ->routes([
                       Route::get('/post')
                           ->pipe(FormatDataResponse1::class)
                           ->pipe(FormatDataResponsAsXml::class)
                           ->action([PostController::class, 'index']),
                       Route::post('/post')
                            ->pipe(FormatDataResponse1::class)
                           ->action([PostController::class, 'add'])
                   ]),
           ]),
       Group::create(null)
           ->routes([
               Group::create('/api2')
                   ->pipe(FormatDataResponseAsJson::class)
                   ->pipe(AccessCheck::class)
                   ->routes([
                       Route::get('/post')
                           ->pipe(FormatDataResponse2::class)
                           ->pipe(FormatDataResponsAsXml::class)
                           ->action([PostController::class, 'index']),
                       Route::post('/post')
                           ->pipe(FormatDataResponse2::class)
                           ->action([PostController::class, 'add'])
                   ]),
           ]),
   ]
источник

M

Mihail in Yii Framework 3
как я и написал собирает под каждый урл набор Middleware
источник

DS

Dmitriy S in Yii Framework 3
Mihail
как я и написал собирает под каждый урл набор Middleware
Внутри это устроенно так, что каждая групповая милтварь добавляется к роуту, в итоге у нас в роутере остаются чистые роуты без групп.  Группы служат исключительно для двух целей. Первая - добавить префикс к роуту, вторая - обобщить общие мидлтвари для каждого роута, чтобы их не нужно было прописывать в каждом рпоуте.
источник

M

Mihail in Yii Framework 3
ок понял но в таком случае как мне сделать на группу /api2/* допустим проверку авторизации чтоб остальные мидлвары не запускались даже не инициализировались и небыло поиска внутреннего каталога?
источник

DS

Dmitriy S in Yii Framework 3
Mihail
ок понял но в таком случае как мне сделать на группу /api2/* допустим проверку авторизации чтоб остальные мидлвары не запускались даже не инициализировались и небыло поиска внутреннего каталога?
Ну, очевидно что роуты в этой группе нужно обернуть этой группой
Group::create('/api2')
   ->routes([
    //your routes
])
источник

Д

Дмитрий in Yii Framework 3
у меня, например, AuthMiddleware только на /account, /info, /payment
источник

Д

Дмитрий in Yii Framework 3
обернуты в группу
источник

DS

Dmitriy S in Yii Framework 3
Дмитрий
обернуты в группу
Код скинь, мне так легче показать
источник

DS

Dmitriy S in Yii Framework 3
Вообще есть такая штука как disableMiddleware(...), ею можно отключить любую мидлтварь для конкретного роута/группы
источник

Д

Дмитрий in Yii Framework 3
Dmitriy S
Код скинь, мне так легче показать
источник

Д

Дмитрий in Yii Framework 3
у меня так для апи.
источник

DS

Dmitriy S in Yii Framework 3
Дмитрий
у меня так для апи.
Скинь текстом
источник

DS

Dmitriy S in Yii Framework 3
Я покажу как сделать проще
источник