2013-07-06 24 views
9

Form:MethodNotAllowedHttpException Laravel-4

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

Route:

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

} 

Dieser Code gibt
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

+0

Warum möchten Sie create method verwenden? Resource Controller sollte Ihre Aufgabe erleichtern, indem Sie gängige Quarkfunktionen definieren. –

+0

Diese Methode möchte ich Benutzer in die Datenbank einfügen. – bigData

+0

für das nur speichern Methode wird von Ressourcen-Controller erstellt –

Antwort

3

Weil in Ihrem roures Sie resourse Controller verwenden, können Sie nur bestimmte Pfade und Aktionen verwenden können, in der Dokumentation beschrieben http://laravel.com/docs/controllers#resource-controllers.

Benutzer/create (UserController :: create) ist, wo Sie das Formular zum Hinzufügen eines neuen Benutzers anzeigen müssen.

Der eigentliche Speicher des Benutzers sollte im Benutzer/Speicher erfolgen, d. H. Ihr Formular muss Daten an die UserController :: store() - Methode senden.

In Ihrem Fall, wenn Sie Ihr Formular nur an 'url' => 'Benutzer' POST, sollte dies automatisch Daten an die richtige Methode senden.

13

Ich möchte nur meine eigene Entdeckung in diese Richtung hinzufügen ... Vielleicht wird dies jemand anderen das Kopf-Scratching retten, das ich gerade durchgeführt habe.

Ich auch implementiert den Route :: Ressourcenmechanismus. Ich konnte nicht herausfinden, warum mein create funktionierte, aber mein update nicht. Es stellt sich heraus, dass Sie den gleichen Formularcode nicht genau wiederverwenden können, das Formular, das ein Update durchführt, muss die Methode PUT oder PATCH verwenden. Warum Update nicht ein POST sein kann, ist mir ein Rätsel.

Das heißt, die Tag-Öffnung Form für ein Update muss wie folgt aussehen:

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

Ohne method => PUT Angabe, können Sie diese nicht-hilfreich Fehler.

+0

Wirklich ein lästiger "Bug". In Chrome Dev Tools und LiveHTTP Header konnte das Problem nicht angezeigt werden. Vielen Dank! – Heroselohim

0

das ist, wie ich es mache, es könnte jemand helfen, kann verbessert werden, aber das wäre Hauptidee.

@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 
Verwandte Themen