22

フィルター内のルート パラメーターにアクセスすることは可能ですか?

たとえば、$agencyId パラメータにアクセスしたい場合:

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

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

});

フィルター内でこの $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');
    }
...
4

2 に答える 2

28

Input::getGETor POST(など) の引数のみを取得できます。

ルート パラメーターを取得するには、次Routeのようにフィルターでオブジェクトを取得する必要があります。

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

パラメータを取得します(フィルタ内):

$route->getParameter('agencyId');

(ただの遊び) あなたのルートで

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

'before' => 'YOUR_FILTER'コンストラクターで詳細を指定する代わりに、パラメーター配列で使用できます。

于 2013-08-15T11:08:16.667 に答える
14

メソッド名は Laravel 4.1 で に変更されましたparameter。たとえば、RESTful コントローラーでは次のようになります。

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

別のオプションは、ファサードを介してパラメーターを取得するRouteことです。これは、ルートの外にいる場合に便利です。

$id = Route::input('id');
于 2013-12-12T21:11:26.890 に答える