Ich versuche, etwas sehr Grundlegendes zum Laufen zu bringen. Ich bin an CI gewöhnt und lerne jetzt Laravel 4, und ihre Dokumente machen es nicht einfach! Wie auch immer, ich versuche ein Anmeldeformular zu erstellen und stelle einfach sicher, dass die Daten erfolgreich gebucht werden, indem ich sie im nächsten Formular drucke. Ich bekomme diese Ausnahme:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
und mein MemberController.php:
public function index()
{
if (Session::has('userToken'))
{
/*Retrieve data of user from DB using token & Load view*/
return View::make('members/profile');
}else{
return View::make('members/login');
}
}
public function validateCredentials()
{
if(Input::post())
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}else{
return View::make('members/login');
}
}
und Routen hat:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
und schließlich hat meine Ansicht login.php diese Formularrichtung:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Jede Hilfe wird sehr geschätzt.
url
bekommen Sie den Fehler?php artisan dump-autoload
?Antworten:
Sie erhalten diesen Fehler, weil Sie auf einer
GET
Route posten .Ich würde Ihr Routing
validate
in separateGET
undPOST
Routen aufteilen .Neue Routen:
Dann könnte Ihre Controller-Methode einfach sein
quelle
Mein Verdacht ist, dass das Problem in Ihrer Routendefinition liegt.
Sie haben die Route als
GET
Anfrage definiert, aber das Formular sendet wahrscheinlich einePOST
Anfrage. Ändern Sie Ihre Routendefinition.Es ist im Allgemeinen besser, benannte Routen zu verwenden (hilft bei der Skalierung, wenn sich die Controller-Methode / Klasse ändert).
Verwenden Sie im Formular Folgendes
quelle
Das Problem ist das, das Sie verwenden,
POST
aber tatsächlich müssen Sie ausführen,PATCH
um dieses Add zu behebenGleich nach der
Form::model
Leitungquelle
{{ method_field('PATCH') }}
in Ihrer Vorlage verwenden.Dies liegt daran, dass Sie Daten über eine get-Methode veröffentlichen.
Anstatt
Versuche dies
quelle
Ich habe dieses Problem auch und die anderen Antworten hier waren hilfreich, aber ich bin mit
Route::resource
der Pflege nimmtGET
,POST
und andere Anfragen.In meinem Fall habe ich meine Route wie folgt verlassen:
Und einfach mein Formular geändert, um es an die
store
Funktion in meinem zu sendenFilesController
Dies hat das Problem behoben, und ich dachte, es lohnt sich, darauf als separate Antwort hinzuweisen, da verschiedene andere Antworten das Hinzufügen einer neuen
POST
Route vorschlagen . Dies ist eine Option, aber nicht erforderlich.quelle
In der Regel
MethodNotAllowedHttpException
passiert, wennAngenommen, Sie definieren eine
POST
Anforderungsroutendatei, senden jedoch eineGET
Anforderung an die Route.quelle
Standardmäßig wird
Form::open()
einePOST
Methode angenommen.Sie haben
GET
in Ihren Routen. Ändern Sie esPOST
in der entsprechenden Route.oder wenn Sie die
GET
Methode verwenden möchten , fügen Sie denmethod
Parameter hinzu.z.B
quelle
Ich sah mich dem Fehler gegenüber, das
Problem war FORM METHOD
Es sollte so sein
quelle
In meinem Fall habe ich eine
POST
AnfrageHTTP
an einen Server gesendet, auf dem ich eingerichtet hatteNginx
, um alle Anfragen an Port80
zu Port umzuleiten, an443
dem ich die App bereitgestellt habeHTTPS
.Durch die direkte Anforderung an den richtigen Port wurde das Problem behoben. In meinem Fall hatte alles , was ich zu tun ist , ersetzen
http://
in der Anforderungs - URL zu ,https://
da ich die Standardports wurde mit80
und443
jeweils.quelle
Im Allgemeinen gibt es einen Fehler im verwendeten HTTP-Verb, z. B.:
Anrufroute
PUT
mitPOST
Anfragequelle
Mein Problem war nicht, dass meine Routen falsch eingerichtet waren, sondern dass ich auf die falsche
Form
Methode verwies (die ich aus einem anderen Formular kopiert hatte). Ich habe getan...(ohne Modellangabe). Aber ich hätte die reguläre
open
Methode anwenden sollen ...Da der erste Parameter
model
ein tatsächliches Modell erwartete, erhielt er keine meiner von mir angegebenen Optionen. Ich hoffe, dies hilft jemandem, der weiß, dass seine Routen korrekt sind, aber etwas anderes stimmt nicht.quelle
Ich hatte auch den gleichen Fehler, aber eine andere Lösung, in der
XYZ.blade.php
ich hatte:was mir den Fehler gab, - ich weiß immer noch nicht warum - aber als ich es geändert habe
Es funktionierte!
Ich dachte, es lohnt sich zu teilen :)
quelle
Laravel unterstützt manchmal
{!! Form::open(['url' => 'posts/store']) !!}
aus Sicherheitsgründen nicht. Deshalb ist der Fehler aufgetreten. Sie können diesen Fehler beheben, indem Sie einfach den folgenden Code ersetzenFehlercode
{!! Form::open(['url' => 'posts/store']) !!}
Richtiger Code
{!! Form::open(array('route' => 'posts.store')) !!}
quelle
In meinem Fall lag es daran, dass mein Formular an eine Route mit einer anderen Middleware gesendet wurde. Daher wurde das Senden von Informationen an diese bestimmte Route blockiert.
quelle
Nun, als ich dieses Problem hatte, hatte ich 2 Codefehler
Ich habe es dadurch korrigiert
so einfach expatiate i die Form geändert
model
zuopen
und auch die Strecke , wo fälschlicherweise in eckigen Klammern gesetzt.quelle
quelle