Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing arguments to a filter - Laravel 4

Tags:

Is it possible to access route parameters within a filter?

e.g. I want to access the $agencyId parameter:

Route::group(array('prefix' => 'agency'), function() {      # Agency Dashboard     Route::get('{agencyId}', array('as' => 'agency', 'uses' => 'Controllers\Agency\DashboardController@getIndex'));  }); 

I want to access this $agencyId parameter within my filter:

Route::filter('agency-auth', function() {     // Check if the user is logged in     if ( ! Sentry::check())     {         // Store the current uri in the session         Session::put('loginRedirect', Request::url());          // Redirect to the login page         return Redirect::route('signin');     }      // this clearly does not work..?  how do i do this?     $agencyId = Input::get('agencyId');      $agency = Sentry::getGroupProvider()->findById($agencyId);      // Check if the user has access to the admin page     if ( ! Sentry::getUser()->inGroup($agency))     {         // Show the insufficient permissions page         return App::abort(403);     } }); 

Just for reference i call this filter in my controller as such:

class AgencyController extends AuthorizedController {      /**      * Initializer.      *      * @return void      */     public function __construct()     {         // Apply the admin auth filter         $this->beforeFilter('agency-auth');     } ... 
like image 613
AndrewMcLagan Avatar asked Aug 15 '13 08:08

AndrewMcLagan


Video Answer


1 Answers

Input::get can only retrieve GET or POST (and so on) arguments.

To get route parameters, you have to grab Route object in your filter, like this :

Route::filter('agency-auth', function($route) { ... }); 

And get parameters (in your filter) :

$route->getParameter('agencyId'); 

(just for fun) In your route

Route::get('{agencyId}', array('as' => 'agency', 'uses' => 'Controllers\Agency\DashboardController@getIndex')); 

you can use in the parameters array 'before' => 'YOUR_FILTER' instead of detailing it in your constructor.

like image 131
netvision73 Avatar answered Oct 14 '22 02:10

netvision73