0

コントローラーのフィルターとパラメーターに問題があります。多分あなたの一人が私を助けることができます。ありがとうございました。私はこれに似たコントローラを持っています:

class Test extends Base_Controller
{

    public function __construct()
    {
        parent::__construct();    
        $this->filter('before', 'permission:destroy|auth')->only(array('show'));        
    }
    public function action_show($id)
    {
    }

そして、次のようなフィルターを定義しました:

Route::filter('permission', function($permission)
{
    echo $permisson;

ここでコントローラーを呼び出すと$permission、フィルターの値はメソッド$idを介して渡されたものになります。action_show($id)しかし、パラメーターのないコントローラー メソッドを使用すると、すべて正常に動作します。メソッド引数の代わりに常にフィルター パラメーターを取得するにはどうすればよいですか?

ご協力いただきありがとうございます!

4

1 に答える 1

1

何が起こるか確認できます...コントローラーにフィルターを追加すると、アクションに渡された引数はフィルターの引数の前に追加されます。func_get_args()これが事実であることを確認するために使用できます。

ただし、フィルターをルートに追加する場合はそうではなく、フィルターは追加の引数なしで実行されます。

したがって、ここで 2 つの選択肢を見ることができます。ルートにフィルターを追加するか...

Route::get('test/(:any)', array('before' => 'permission:destroy|auth', 'use' => 'test@show'));

または、フィルターを変更してfunc_get_args()、次のように使用します...

Route::filter('permission', function()
{
    $args = func_get_args();
    $permission = array_pop($args);

});
于 2013-04-11T14:14:29.793 に答える