Laravel 4:传递数组进行过滤

时间:2014-01-09 01:51:29

标签: php laravel-4

根据我的理解,我们可以通过以下方式传递参数:

Route::filter('age', function($route, $request, $value)
{
    //
});

Route::get('user', array('before' => 'owner|age:200', function()
{
    return 'Hello World';
}));

但是,如何将数组传递给过滤器?例如,我想将“汽车,快艇,共管公寓”传递给业主过滤器。数组中的项目数是动态的,具体取决于路由。怎么可能这样做?

谢谢。

3 个答案:

答案 0 :(得分:4)

我这样做的技巧:

Route::filter('filtername', function($route, $request, $value)
{
    $array = explode('-',$value); // use - for delimiter
    // do whatever here
});

在路线上,像这样使用

Route::get('user', array('before' => 'filtername:item1-item2-item3', function()
{
    return 'Hello World';
}));

希望这会有所帮助。

答案 1 :(得分:2)

您无法在Laravel 4.0中传递数组(可能在Laravel 4.1中)。但是,您可以在过滤器中传递多个参数,并确保它们以逗号(,)分隔。

例如:

Route::filter('age', function($route, $request, $age, $gender, $name)
{
    if ($age < 200 && $gender == 'male' && $name = 'anam' ) {
        return "Welcome to Laravel. Enjoy the awesome!";
    }
});

Route::get('user', array('before' => 'owner|age:200,male,anam', function()
{
    return 'Hello World';
}));

答案 2 :(得分:1)

像Anam所说,你可以用逗号分隔多个参数。 您可以使用func_get_args()将多个参数转换回数组。

array_except是一个从数组中删除某些键的laravel函数。

Route::filter('age', function($route, $request, $value)
{
    $params = array_except(func_get_args(), array(0, 1));
    if(count($params) > 3) {
        // do something
    }
});