2016-08-09 7 views
2

У меня есть (схематично) следующая ситуация:Laravel исключить маршрут в гнездовом Middleware группы

MiddlewareGroup1{ 

    MiddlewareGroup2{ 

     Route::resource(...); 
     ... 
     Route::post('some-ajax-request', '[email protected]'); 

    } 

    OtherNestedMiddlewareGroups{ 
     ... 
    } 

} 

У меня есть проблема, которую я хочу MiddlewareGroup2 применить для маршрута АЯКСА, но не MiddlewareGroup1. Как я могу сделать MiddlewareGroup1 не применимым, но сохранить MiddlewareGroup2?

+0

Вы не хотите создавать другую MiddlewareGroup2 вне MiddlewareGroup1? –

+0

@ rap-2-h скорее нет, это для большого приложения с большим количеством маршрутов, и я скорее не буду определять несколько одинаковых групп, чтобы сохранить хороший структурированный обзор в файле маршрутов, если это имеет смысл – Markinson

+0

Ok I но IMO это имеет смысл * иметь MiddlewareGroup2 из MiddlewareGroup1, если он не применяется. Во всяком случае, это просто мнение! –

ответ

2

Я думаю, что здесь нет встроенного решения. Вы можете поместить этот маршрут за пределами MiddlewareGroup1 или вы можете проверить текущий запрос URL в MiddlewareGroup1, как:

.... 
if ($request->is('some-ajax-request')) { 
    return $next($request); 
} 
.... 

это пропустит MiddlewareGroup1 промежуточное программное обеспечение для определенного URL (ов).

Если у вас есть много подобных АЯКС маршрутов, вы могли бы использовать аналогичные URL-адрес для них («Ajax-добавить-материал», «Аякс-д-некоторые-вещь» и т.д.) и проверить их, как это:

if ($request->is('ajax*')) { .... } 
+1

Хороший ответ, спасибо! В качестве дополнения, чтобы исключить больше маршрутов, я определю массив с исключенными маршрутами в промежуточном программном обеспечении и foreach + ifelse, чтобы проверить, действительно ли он. – Markinson