Laravel Route有1个必需和可选的无限参数

时间:2015-08-23 16:15:02

标签: php laravel laravel-4 laravel-routing

我定义了一个在TestController中调用测试函数的路由。

Route::get('/test/{function_name}','TestController@test');

此测试函数在内部调用与TestController内的名称匹配的函数。

这适用于不需要参数的函数。但是某些功能需要参数,然后路线变为无效。

public function test($function_name)
{
    try
    {
        var_dump($this->$function_name());
        return;
    }
    catch(Exception $ex)
    {
        throw $ex;
    }
}

// This functions get called fine
public function getRecord(){}

// But this functions does not work because i am passing extra paramters in the url which in turns makes the route invalid

public function getRecordByNameAndPrice($name, $price){}

那么有什么方法可以定义一个路由,它应该包含1个参数,但也应该允许N个额外的参数,以便我可以调用那些需要参数的函数。

由于

2 个答案:

答案 0 :(得分:2)

使用where方法允许其余部分包含斜杠:

Route::get('test/{func}/{rest?}', 'TestController@test')->where('rest', '.*');

然后使用$request->segments()将它们全部作为单独的值:

public function test($method, Request $request)
{
    $params = array_slice($request->segments(), 2);

    return call_user_func_array([$this, $method], $params);
}

不要忘记use Illuminate\Http\Request向上。

答案 1 :(得分:0)

让我们说你的网址是
    /products?id=999&format=json&apikey=123456
并像这样定义你的路线

Route::get('/prodcuts',function(){
    return Request::all();
})
//  output

{"id":"999","format":"json","apikey"=>"123456"}