我想知道是否有可能减少laravel4中同一控制器的路由。
这是我的路线:
Route::get('emp/add-employee/','EmpController@addEmployee');
Route::post('emp/add-employee/','EmpController@addEmployee');
Route::get('emp/edit-employee/{id}','EmpController@editEmployee');
Route::post('emp/edit-employee/{id}','EmpController@editEmployee');
Route::get('emp/view-employee/{id}','EmpController@viewEmployee');
有没有可以减少......?
答案 0 :(得分:5)
您的路线操作看起来就像您在RESTful Resource Controller中找到的路线操作。所以你可以用这个:
Route::resource('emp', 'EmpController', array('only' => array('create', 'store', 'edit', 'update', 'show')));
这当然要求您相应地重命名控制器方法,并且路径路径会略有不同,但您具有更紧凑的路径定义和一致的命名。以下是上面Route::resource
定义生成的路由。
+-----------------------------+---------------+-------------------------+
| GET emp/create | emp.create | EmpController@create |
| POST emp | emp.store | EmpController@store |
| GET emp/{id} | emp.show | EmpController@show |
| GET emp/{id}/edit | emp.edit | EmpController@edit |
| PUT emp/{id} | emp.update | EmpController@update |
+-----------------------------+---------------+-------------------------+
因此您必须重命名控制器方法名称,如下所示:
GET : addEmployee() -> create() // shows the add form
POST: addEmployee() -> store() // processes the add form when submitted
GET : editEmployee() -> edit() // shows the edit form
POST: editEmployee() -> update() // processes the edit form when submitted
GET : viewEmployee() -> show()
答案 1 :(得分:2)
您可以使用控制器路线。
Route::controller('emp', 'EmpController');
现在您只需重命名控制器中的函数,以表示使用的方法,如下所示:
public function getAddEmloyee()
public function postAddEmloyee()
public function getEditEmployee($id)
etc.
答案 2 :(得分:1)
是的,请使用Route::match()
。这样您就可以在单个路由调用中指定GET
和POST
,如下所示:
Route::match(['GET', 'POST'], 'emp/edit-employee/{id}','EmpController@editEmployee');
您还可以使用Route::all()
来匹配任何类型请求,其中包括GET
和POST
以及可能指定的任何其他HTTP谓词,如果这是您想要的。< / p>