好吧,这对Laravel 4来说有点新,而且我遇到了问题。
我在我的路线上使用资源控制器,但我的控制器中也有一些其他功能。正如我所说,我是Laravel的新手,所以我甚至不确定这是不是正确的做法。
所以,我的问题是,当我将编辑($ id)函数作为GET方法调用,然后将更新($ id)方法作为POST时,它可以正常工作。
routes.php文件
Route::get('tasks/edit/{id}', 'TasksController@edit');
Route::post('tasks/edit', 'TasksController@update');
有些无效的路线是:
Route::get('tasks/complete/{id}', 'TasksController@complete');
Route::post('tasks/complete', array('as' => 'tasks.completed', 'uses' =>'TasksController@completed')); //I've tried this route a few different ways
在我看来,我是这样用Form :: open()调用方法调用方法的:
{{ Form::open(array('route' => array('tasks.completed', $task->id))) }}
在我的TasksController.php中,我的方法是:
/**
* Complete the task
*
* @param int $id
* @return Response
*/
public function complete($id) //GET
{
//Find the task by id and allow to complete
return View::make('tasks.complete')->with('task', Task::find($id));
}
/**
* Update the completion
*
* @param int $id
* @return Response
*/
public function completed($id) //POST
{
$tasks = Task::find($id);
$tasks->complete = Task::completion(); //scope query from Model
$tasks->save();
//Redirect to main tasks list
return Redirect::to('/');
}
无论我做什么,我都会遇到以下错误:MissCongument 1 for TasksController :: completed()。
我不明白为什么编辑资源无问题,但自定义功能不会出现问题。我几乎是正面的我忽略了一些东西,但我似乎无法弄清楚是什么。
提前感谢您的帮助!
答案 0 :(得分:4)
您还必须在POST路由中定义id参数:
Route::post('tasks/complete/{id}', array('as' => 'tasks.completed', 'uses' =>'TasksController@completed'));
表单标签的差异很微妙。
没有ID就可以构建:
<form method="POST" action="http://site/tasks/complete?1" accept-charset="UTF-8">
用它:
<form method="POST" action="http://site/tasks/complete/1" accept-charset="UTF-8">
但这足以让路由系统不将该参数传递给您的控制器,然后它总是丢失。
答案 1 :(得分:0)
表单标记
中使用的Laravel默认 POST 方法
当使用get方法然后定义
<form method="GET" action="http://site/tasks/complete/1" accept-charset="UTF-8">