Подтвердить что ты не робот

Передача аргументов фильтру - Laravel 4

Можно ли получить доступ к параметрам маршрута в пределах фильтра?

например. Я хочу получить доступ к параметру $agencyId:

Route::group(array('prefix' => 'agency'), function()
{

    # Agency Dashboard
    Route::get('{agencyId}', array('as' => 'agency', 'uses' => 'Controllers\Agency\[email protected]'));

});

Я хочу получить доступ к этому параметру $agencyId в моем фильтре:

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);
    }
});

Только для справки я вызываю этот фильтр в своем контроллере как таковой:

class AgencyController extends AuthorizedController {

    /**
     * Initializer.
     *
     * @return void
     */
    public function __construct()
    {
        // Apply the admin auth filter
        $this->beforeFilter('agency-auth');
    }
...
4b9b3361

Ответ 1

Input::get может извлекать аргументы GET или POST (и т.д.).

Чтобы получить параметры маршрута, вы должны захватить объект Route в своем фильтре, например:

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

И получите параметры (в вашем фильтре):

$route->getParameter('agencyId');

(просто для удовольствия) На вашем маршруте

Route::get('{agencyId}', array('as' => 'agency', 'uses' => 'Controllers\Agency\[email protected]'));

вы можете использовать в массиве параметров 'before' => 'YOUR_FILTER' вместо того, чтобы детализировать его в вашем конструкторе.

Ответ 2

Имя метода изменилось в Laravel 4.1 до parameter. Например, в контроллере RESTful:

$this->beforeFilter(function($route, $request) {
    $userId = $route->parameter('users');
});

Другой вариант - получить параметр через фасад Route, что удобно, если вы находитесь за пределами маршрута:

$id = Route::input('id');