1

Bolt 拡張機能内では、次のようにアプリのインスタンスにバインドされた多くのルートがあります。

$this->app->post(Extension::API_PREFIX . "session", array($this, 'login'))
              ->bind('login');
$this->app->delete(Extension::API_PREFIX . "session", array($this, 'logout'))
              ->bind('logout');


$this->app->post(Extension::API_PREFIX . "resetpassword", array($this, 'reset_password'))
              ->bind('reset_password');

$this->app->post(Extension::API_PREFIX . "forgotpassword", array($this, 'forgot_password'))
              ->bind('forgot_password');

$this->app->post(Extension::API_PREFIX . "changepassword", array($this, 'change_password'))
              ->bind('change_password');

$this->app->get(Extension::API_PREFIX . "session", array($this, 'get_session'))
              ->bind('get_session');

beforeしかし、ルートのサブセットに対してフィルターを実行したいと考えています。これらのルートのいくつかをグループ化し、フィルターをバインドするにはどうすればよいですか? これまでのところ、次のように、すべてのルートにフィルターを適用する方法を見つけただけです。

$this->app->before(function (Request $request) {    
    // Filter request here
 });
4

1 に答える 1

3

ControllerCollection クラスは、保持している各コントローラーに呼び出しを転送します。したがって、次のようなことができます (テストされていないコード!):

<?php
// intializations, etc.

// this will give you a new ControllerCollection class
$collection = $this->app['controllers_factory'];

$collection->post(Extension::API_PREFIX . "session", array($this, 'login'))
           ->bind('login');
// etc.

// Apply middleware:
$collection->before(function(Request $request) {
  // do whatever you want in your filter
});

// Mount the collection to a certain URL:
$this->app->mount('/mount-point', $collection);  // if you don't want /mount-point 
                                                 // just pass an empty string

これは、ルートを有効にするためにコレクションを「マウント」する必要があるため、すべてのルートを同じ PATH の下に配置した場合にのみ機能することに注意してください (すでに で行っていますExtension::API_PREFIX) 。

于 2015-03-20T07:23:46.943 に答える