我定义了一个在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个额外的参数,以便我可以调用那些需要参数的函数。
由于
答案 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"}