Php 缺少参数1 Laravel 4控制器函数

Php 缺少参数1 Laravel 4控制器函数,php,laravel,laravel-4,laravel-routing,Php,Laravel,Laravel 4,Laravel Routing,好吧,对拉威尔4来说有点陌生,我被一个问题困住了 我在路由上使用资源控制器,但控制器中还有一些其他功能。正如我所说,我对拉雷维尔是新手,所以我甚至不确定这是正确的做法 所以,我的问题是,当我调用edit($id)函数作为GET方法,然后将update($id)方法作为POST方法时,它可以正常工作 Routes.php Route::get('tasks/edit/{id}', 'TasksController@edit'); Route::post('tasks/edit', 'TasksCo

好吧,对拉威尔4来说有点陌生,我被一个问题困住了

我在路由上使用资源控制器,但控制器中还有一些其他功能。正如我所说,我对拉雷维尔是新手,所以我甚至不确定这是正确的做法

所以,我的问题是,当我调用edit($id)函数作为GET方法,然后将update($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('/');
}
无论我做什么,都会继续出现以下错误:TasksController::completed()缺少参数1

我不明白为什么编辑资源可以正常工作,而自定义函数却不能。我几乎可以肯定我忽略了什么,但我似乎不知道是什么


提前谢谢你的帮助

您还必须在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">


但这足以使路由系统不将该参数传递给控制器,并且该参数始终丢失。

您还必须在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">

但这足以使路由系统不将该参数传递给控制器,然后它总是丢失

Laravel默认值POST表单标记中使用的方法

当使用get方法时,则定义

<form method="GET" action="http://site/tasks/complete/1" accept-charset="UTF-8">

Laravel默认值POST表单标记中使用的方法

当使用get方法时,则定义

<form method="GET" action="http://site/tasks/complete/1" accept-charset="UTF-8">


谢谢安东尼奥!我知道这是我忽略的东西。但是为什么我不必在帖子上使用edit/{id}?谢谢安东尼奥!我知道这是我忽略的东西。但是为什么我不必在帖子上使用edit/{id}?