我有一个问题要解决Laravel 5.1中的一些计算,到目前为止,我找到的最佳解决方案是创建两个不同的控制器,一个用于处理特定项目的计算:
Route::get('company/convert/{note}','ScenarioController@NoteConvert');
所有项目之一:
Route::get('company/convert','ScenarioController@AllNotesConvert');
两者都会使用渲染相同的视图。
我的问题是:这是一个很好的做法吗?
在我的脑海中,一个好的解决方案是只使用一条路线,并通过请求在一些变量中接收1个特定的音符或全部。 类似的东西:
$ http.get( '/公司/转换/',数据)
data
将收到1个或所有将被转换的音符。
P.S。:我正在使用AngularJS来呼叫这条路线。
答案 0 :(得分:2)
如果您希望在控制器中使用一种方法,则必须稍微改变路线:
Route::get('company/convert/{note?}','ScenarioController@NoteConvert');
你的方法就像是
public function NoteConvert($note=null)
{
if ($note == null) {
// do all convertions
return view()
}
// single convertion
...
}
这样 NoteConvert 方法将是处理多次和单次转换的方法。
不要忘记删除
Route::get('company/convert','ScenarioController@AllNotesConvert');
不再需要了
编辑: https://laravel.com/docs/5.2/routing#parameters-optional-parameters
答案 1 :(得分:1)
对我来说最好的方法是在网址中传递一个可选参数并在控制器上进行检查。
答案 2 :(得分:0)
我认为您的任务是使用视图中的note参数使用过滤器生成所有项目和特定数据的数据。
我建议你创建像这样的路线
Route::controller('company', 'ScenarioController');
然后用这个
这样的两个函数创建一个控制器 public function getIndex()
{
return view('convert');
}
这里转换是名称视图刀片。
public function postFilter($note)
{
$x= // do what you want
return view('convert', compact('x'));
}
然后使用复选框在刀片中添加过滤器,并将表单操作URL设置为 "公司/滤波器/ {注释}"
这是我认为更好的做法。
这里提到隐式路由。 https://laravel.com/docs/5.1/controllers