2013-07-03 17 views
9

Buduję bardzo prosty CRUD w wersji laravel, aby dowiedzieć się czegoś o tej strukturze. Działa jak urok, ale nie mogę sprawić, że funkcja aktualizacji kontrolera działa poprawnie.Laravel: Błąd modelu wiązania i kontrolera zasobów

Oto moja sytuacja:

1) zbudować kontroler zasobów poleceniem rzemieślnik.

2) zbudować widoku formularza przy użyciu noża i Otwórz formularz z tym kodem:

<!-- Form --> 
@if($mode=="edit") 
    {{ Form::model($task, array('route'=>array('task.update',$task->id),'files'=>true)) }} 
@else 
    {{ Form::open(array('route'=>'task.store','files'=>true)) }} 
@endif 

Działa świetnie i każdego pola są wypełnione odpowiednimi danymi. generate url działań formularza jest:

http://localhost/mysite/task/2 

Problem polega na tym, że kiedy przesłać ten formularz otrzymuję ten błąd:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException 

Ktoś może zrozumieć, dlaczego? Czy mogę pomóc Ci uzyskać więcej informacji?

Odpowiedz

9

Trzeba 'metody' => 'włożyć'.

{{ Form::model($task, array('route' => array('task.update', $task->id), 'files' => true, 'method' => 'PUT')) }}

Jak widać tutaj.

http://laravel.com/docs/controllers#resource-controllers

Verb:  PUT/PATCH 
Path:  /resource/{id} 
action: update 
route: resource.update 

EDIT: Aby wywołać aktualizację() - działanie należy wysłać PUT lub patch-żądanie trasy resource.update, w przypadku task.update.

0

Masz problem z działaniem formularza. Zakładając, że trasa tak:

Route::post('task/update/{id}, function() 
{ 

}); 

Następnie swoją postać modelu związany powinno być:

{{ Form::model($task, array('url'=>array('task/update',$task->id),'files'=>true)) }} 
0

Jedynym błędem w twoim kodzie jest to, że nie przekazałeś PUTCH PATCH jako metody HTTP do przesłania formularza na serwer.

Symfony \ Component \ HttpKernel \ Wyjątek \ MethodNotAllowedHttpException jest wyzwalany na takich stanach.

formą modelu demo będzie tak

Form::model($name_model, array('action' => array('[email protected]', $argument), 'files' => true, 'method' => 'PUT')) 

lub z nazwą trasy, jak

Form::model($name_model, array('route' => array('route.name', $argument), 'files' => true, 'method' => 'PUT')) 
Powiązane problemy