缺少参数1 Laravel 4控制器功能

时间:2014-01-14 04:16:56

标签: php laravel laravel-4 laravel-routing

好吧,这对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()。

我不明白为什么编辑资源无问题,但自定义功能不会出现问题。我几乎是正面的我忽略了一些东西,但我似乎无法弄清楚是什么。

提前感谢您的帮助!

2 个答案:

答案 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">