2014-01-14 6 views
1

Хорошо, так что немного нового в Laravel 4, и я застрял в проблеме.Отсутствует аргумент 1 Laravel 4 Функция контроллера

Я использую контроллеры ресурсов на своих маршрутах, но у меня также есть некоторые другие функции в моем контроллере. Как я уже сказал, я новичок в Laravel, поэтому я даже не уверен, что это правильная практика.

Итак, моя проблема в том, что когда я вызываю функцию редактирования ($ id) как метод GET, а затем метод обновления ($ id) как POST, он работает нормально.

routes.php

Route::get('tasks/edit/{id}', '[email protected]'); 
Route::post('tasks/edit', '[email protected]'); 

Там маршруты, которые не работают, являются:

Route::get('tasks/complete/{id}', '[email protected]'); 
Route::post('tasks/complete', array('as' => 'tasks.completed', 'uses' =>'[email protected]')); //I've tried this route a few different ways 

На мой взгляд, я звоню метод с формой :: открытым() вызов как так:

{{ 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('/'); 
} 

Независимо от того, что я делаю, я получаю постоянную ошибку: Отсутствует аргумент 1 для TasksController :: completed().

Я не понимаю, почему ресурс редактирования будет работать без проблем, но пользовательские функции не будут. Я почти уверен, что я что-то пропускаю, но я просто не могу понять, что.

Спасибо за вашу помощь заранее!

ответ

4

Вы должны определить идентификатор параметра и в пути POST:

Route::post('tasks/complete/{id}', array('as' => 'tasks.completed', 'uses' =>'[email protected]')); 

Разница в виде тега является тонким.

Без 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"> 

Но этого достаточно, чтобы система маршрутизации не передать этот параметр на контроллере, а затем это всегда не хватает ,

+0

Благодаря Антонио! Я знал, что это то, что я не замечал. Но почему я не должен был использовать edit/{id} в сообщении? – Creationist

0

Laravel по умолчанию POST метод, используемый в виде тега

и при использовании метода прибудете затем определяется

<form method="GET" action="http://site/tasks/complete/1" accept-charset="UTF-8"> 
Смежные вопросы