2013-07-06 32 views
9

Forma:MethodNotAllowedHttpException laravel-4

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

Percorso:

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

} 

Questo codice dà
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

+0

perché si desidera utilizzare il metodo di creazione? Il controllore delle risorse aveva lo scopo di facilitare il compito definendo funzioni comuni di cagliata. –

+0

Questo metodo voglio utilizzare inserire utente nel database. – bigData

+0

per l'unico metodo di archiviazione creato dal controller risorse –

risposta

3

Perché nei vostri Roures si utilizzano controller di resourse, è possibile utilizzare i percorsi e le azioni solo specifiche, descritte nella documentazione http://laravel.com/docs/controllers#resource-controllers.

user/create (UserController :: create) è dove è necessario mostrare il modulo per aggiungere un nuovo utente.

L'archiviazione effettiva dell'utente deve essere eseguita in utente/archivio, ovvero il modulo deve essere inviato al metodo UserController :: store().

Nel tuo caso se POST il tuo modulo solo per 'url' => 'utente', questo dovrebbe inviare automaticamente i dati al metodo corretto.

13

Vorrei solo aggiungere la mia scoperta in questo modo ... Forse questo salverà qualcun altro il graffio della testa che ho appena eseguito.

Ho implementato anche il meccanismo delle risorse Route ::. Non riuscivo a capire perché la mia creazione stava funzionando, ma il mio aggiornamento non lo era. Si scopre che non è possibile riutilizzare esattamente lo stesso codice modulo, il modulo che fa un aggiornamento deve utilizzare il metodo PUT o PATCH. Perché l'aggiornamento non può essere un POST è oltre me.

Vale a dire, il tag di apertura per un aggiornamento deve apparire così:

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

Senza specificare method => PUT, si ottiene questo errore non-utile.

+0

Davvero un "bug" fastidioso. Chrome Dev Tools e LiveHTTP Headers non sono riusciti a mostrare il problema. Grazie! – Heroselohim

0

questo è come lo sto facendo, potrebbe aiutare qualcuno, può essere migliorato, ma questa sarebbe l'idea principale.

@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 
Problemi correlati