我有多条看起来像这样的路线:
Route::get('pending-submit', 'CasesController@cases');
Route::get('submited', 'CasesController@cases');
Route::get('closed', 'CasesController@cases');
我甚至在路由器API文档中一直在寻找,除了在控制器中创建多个方法之外,我找不到我的要求的解决方案。除了添加where子句以识别每个case之间的不同状态之外,该方法执行完全相同的查询,我试图做的是有这样的方法
public function cases($whereStatus = 0){
return Cases::where('status', $whereStatus)->get();
}
而不是这样做:
public function pendingCases(){
return Cases::where('status', 0)->get();
}
public function submitedCases(){
return Cases::where('status', 1)->get();
}
public function closedCases(){
return Cases::where('status', 2)->get();
}
但是我可以找到一种方法将该参数传递给路径中的方法,所以我现在必须为每条路径创建一个对我来说似乎没必要的方法。我知道我可以生成带有get参数的url但是我想让它更干净,有没有办法让我添加该参数而不在url中?
顺便说一下,我也试过这样的东西,但没有做过:
Route::get(
'pending-submit',
array(
'uses' => 'CasesController@cases',
'params' => array(
'filter' => 0
)
)
);
编辑:
我知道我可以制作https://someurl.com/cases?status=0之类的网址,也可以使用https://someurl.com/cases等网址,这些网址要求每条路线使用不同的方法,但我想要的是https://someurl.com/cases之类的网址,并且只有一个路由器传递参数的方法,而不是我从请求中获取参数,所以我可以这样做:
public function myMethod($param){
/*
* Here I access the $param without calling Request::input('someparam');
* or without Request::path() where then I have to check what path is it
*/
echo $param; /* this should already have the param from the route */
}
编辑:
@AndyNoelker我所拥有的是3个不同的值0,1或2
我希望有这样的东西
Route::get(
'cases',
array(
'uses' => 'CasesController@cases',
'status' => 0 /* this is what I need */
)
);
如果没有来自routes.php的话,那很好,我只是想知道,你给我的所有其他方法都不是我想要或要求的,因为我已经知道如何做了。
答案 0 :(得分:4)
您将不得不通过URL传递所需的状态 - 否则路线将无法知道您想要的状态。您可以通过URL查询参数或作为完全成熟的路由参数来执行此操作。我个人建议在这种情况下使用查询参数,但我会告诉你们两个。
URL
example.com/cases?status=1
路线
Route::get('cases', CasesController@cases);
CasesController
public method cases(Request $request)
{
$input = $request->all();
$status = $input['status'];
return Cases::where('status',$status)->get();
}
URL
example.com/cases/1
路线
Route::get('cases/{id}', CasesController@cases);
CasesController
public method cases($id)
{
return Cases::where('status',$id)->get();
}
当然,如果您更喜欢在路线中使用slug或其他ID,那么您必须在查询中对其进行调整,但这应该是正确的想法。
答案 1 :(得分:2)
我认为您正在寻找路线参数:
Route::get("/cases/{case}", "CasesController@cases");
这将符合以下任何一项:
some_url/cases/pending-submit
some_url/cases/submited
some_url/cases/closed
...
然后,public function cases
中的函数CasesController
将如下所示:
public function cases($case){
if($case == "pending-submit"){
// Do Something
} else if($case == "submited") {
// Do Something Else
}
// OR
return Cases::where('status', $case)->get();
}
等等。请在此处查看url
参数:Documentation
答案 2 :(得分:0)
Route::get('pending-submit', array('status' => 0, 'uses' => function(){
$CasesController = $app->make('CasesController');
return $CasesController->callAction('cases', $parameters = array());
}));
答案 3 :(得分:0)
如果我正确理解你的问题,这应该有用。
网络路线
Route::get('pending-submit', [
'as' => 'pending',
'uses' => 'CasesController@cases',
'status-id' => '0'
]);
并且,您可以访问通过以下路径传递的参数,
在控制器中
$request->route()->getActions('status-id')
在视图中
{{ request()->route()->getAction('status-id') }}
经过测试,完美适用于L5.6