2015-11-12 3 views
0

Не удалось найти что-либо, что конкретно соответствует моей ситуации. У меня есть группа маршрутов, определенная как:Параметр использования маршрута Laravel в промежуточном программном обеспечении

Route::group(['prefix' => 'api/v1/{access_token}'], function(){ 
    ... 
} 

У вышеуказанной группы есть несколько путей ресурсов внутри. Я пытаюсь создать собственное промежуточное программное обеспечение, которое будет проверять параметр access_token и возвращать ответ 400, если этот параметр недействителен. Я хотел бы быть в состоянии так что-то вроде этого в моих контроллеров:

class ProductController extends Controller { 

    /** 
    * Instantiate a new ProductController 
    */ 
    public function __construct() 
    { 
     $this->middleware('verifyAccessToken'); 
    } 
    ... 
} 

Мой вопрос не «как я могу определить пользовательский межплатформенное», а, как я могу получить доступ к параметру access_token от в пределахhandle функция моего пользовательского промежуточного программного обеспечения?

РЕДАКТИРОВАТЬ: Хотя вопрос, предложенный как дубликат, подобен и имеет ответ, этот ответ кажется устаревшим и/или неудовлетворительным для того, что я пытаюсь выполнить.

+0

Есть ли какая-то особая причина, по которой вы не хотите ставить промежуточное ПО в группу маршрутов самостоятельно? – Ohgodwhy

+0

@Ohgodwhy Nope. Обычно я предпочитаю определять его в своем контроллере, но я был бы открыт для любого решения, которое позволяет мне выполнить то, что я хочу. – Vince

+2

Возможный дубликат [Отправить маршрут param для промежуточного программного обеспечения в качестве аргумента Laravel] (http://stackoverflow.com/questions/32082758/send-route-param-to-middleware-as-argument-laravel) – ventaquil

ответ

1

Вы можете просто получить доступ к нему из вашего $request объекта с помощью волшебной __get метод как это:

public function handle($request, Closure $next) 
{ 
    $token = $request->access_token; 
    // Do something with $token 
} 
+1

Как просто получается - работает как шарм. – Vince

0

http://laravel.com/docs/master/middleware#middleware-parameters

Для простого

public function yourmethod($access_token){ 
    $this->middleware('verifyAccessToken', $access_token); 
} 

Я думаю, что вы не можете сделать это в __construct() методе.

+0

Суть заключается не в том, чтобы дублировать один и тот же код в рамках каждой функции контроллера ... – Vince

+1

@ Наверное, попробуй мой вопрос http://stackoverflow.com/questions/32082758/send-route-param-to-middleware-as-argument -laravel – ventaquil

0

Просто придерживайтесь промежуточное на пути :: Группа

Route::group(['prefix' => 'api/v1/{access_token}', 'middleware' => 'verifyAccessToken'], function(){ 

}); 

Затем в ПО промежуточного слоя, как указал Томас Ким, вы можете использовать объект $request, чтобы получить доступ к токену, который был передан маршруту.

public function handle($request, Closure $next) 
{ 
    $token = $request->access_token; 
    // Do something with $token 
} 
Смежные вопросы