2013-07-06 25 views
9

Postać:MethodNotAllowedHttpException laravel-4

{{ Form::open(array('url' => 'user/create', 'files' => true)) }} 

trasy:

Route::resource('user', 'UserController'); 

UserController.php

class UserController extends BaseController { 

    public function index() 
    { 
     return 'hi11'; 
     //return View::make('home.index'); 
    } 
    public function create() 
    { 
     return 'hi22'; 
     //return View::make('home.index'); 
    } 

} 

Kod ten umożliwia
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

+0

dlaczego chcesz użyć metody create? Kontroler zasobów miał ułatwić zadanie, definiując wspólne funkcje curd. –

+0

Ta metoda chcę użyć wstawić użytkownika do bazy danych. – bigData

+0

dla tej jedynej metody przechowywania jest tworzony przez kontroler zasobów –

Odpowiedz

3

Ponieważ w swoim Roures użyć kontrolera resourse można używać tylko konkretne ścieżki i działania, opisane w dokumentacji http://laravel.com/docs/controllers#resource-controllers.

user/create (UserController :: create) to miejsce, w którym należy wyświetlić formularz dodawania nowego użytkownika.

Faktyczne przechowywanie użytkownika powinno odbywać się w systemie użytkownika/sklepu, tzn. Formularz musi zostać wysłany do metody UserController :: store().

W przypadku, gdy POST formularz jest tylko "url" => "użytkownik", powinno to automatycznie wysłać dane do prawidłowej metody.

13

Chciałbym dodać własne odkrycie w ten sposób ... Może to uratuje komuś innemu drapanie głowy, które właśnie zrobiłem.

Również zaimplementowałem mechanizm Route :: resource. Nie mogłem się domyślić, dlaczego moja kreacja działa, ale moja aktualizacja nie była. Okazuje się, że nie można ponownie użyć dokładnie tego samego kodu formularza, formularz, który aktualizuje, musi korzystać z metody PUT lub PATCH. Dlaczego aktualizacja nie może być POST jest poza mną.

To znaczy, zmienna forma otwarcie na aktualizację musi wyglądać następująco:

Form::model($thing, array(
    'method' => 'PUT', 
    'route' => array('things.update', $thing->id) 
    ) 

Bez określania method => put, masz ten nie-pomocne błąd.

+0

Naprawdę denerwujący "błąd". Narzędzia Chrome Dev i nagłówki LiveHTTP nie wykazały żadnego problemu. Dzięki! – Heroselohim

0

tak to robię, to może komuś pomóc, ale to byłby główny pomysł.

@if(isset($data)) 
    {{ Form::open(['route'=>['blog.update', isset($data) ? $data->slug : null],'method' => 'patch','role' => 'form', 'class' => 'blog-form form-horizontal']) }} 
@else 
    {{ Form::open(['route'=>'blog.store','role' => 'form', 'class' => 'blog-form form-horizontal']) }} 
@endif