将参数传递给过滤器 - Laravel 4

And*_*gan 22 php laravel laravel-4

是否可以访问过滤器中的路径参数?

例如,我想访问$ agencyId参数:

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

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

});
Run Code Online (Sandbox Code Playgroud)

我想在我的过滤器中访问此$ 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);
    }
});
Run Code Online (Sandbox Code Playgroud)

仅供参考我在我的控制器中调用此过滤器:

class AgencyController extends AuthorizedController {

    /**
     * Initializer.
     *
     * @return void
     */
    public function __construct()
    {
        // Apply the admin auth filter
        $this->beforeFilter('agency-auth');
    }
...
Run Code Online (Sandbox Code Playgroud)

net*_*n73 28

Input::get只能检索GETPOST(等等)参数.

要获取路由参数,您必须Route在过滤器中抓取对象,如下所示:

Route::filter('agency-auth', function($route) { ... });
Run Code Online (Sandbox Code Playgroud)

并获取参数(在您的过滤器中):

$route->getParameter('agencyId');
Run Code Online (Sandbox Code Playgroud)

(只为了好玩)在你的路线

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

您可以在参数数组中使用,'before' => 'YOUR_FILTER'而不是在构造函数中详细说明它.


alb*_*bur 14

Laravel 4.1中的方法名称已更改为parameter.例如,在RESTful控制器中:

$this->beforeFilter(function($route, $request) {
    $userId = $route->parameter('users');
});
Run Code Online (Sandbox Code Playgroud)

另一种选择是通过Route外观检索参数,当您在路线之外时这很方便:

$id = Route::input('id');
Run Code Online (Sandbox Code Playgroud)