it-swarm.com.de

laravel wirft MethodNotAllowedHttpException

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 sicher, dass die Daten erfolgreich gepostet 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', '[email protected]');
Route::get('/validate', '[email protected]');

und zum Schluss hat meine Ansicht login.php die folgende Formularrichtung:

<?php echo Form::open(array('action' => '[email protected]')); ?>

Jede Hilfe wird sehr geschätzt.

87
spacemonkey

Sie erhalten diesen Fehler, weil Sie eine GET-Route POSTEN.

Ich würde Ihr Routing für "validate" in separate GET- und POST - Routen aufteilen. Neue Routen:

Route::post('validate', '[email protected]');

Route::get('validate', function()
{
    return View::make('members/login');
});

Dann könnte es Ihre Controller-Methode sein

public function validateCredentials()
{
    $email = Input::post('email');
    $password = Input::post('password');
    return "Email: " . $email . " and Password: " . $password;
}
180
hayhorse

Das Problem ist, dass Sie POST verwenden, aber tatsächlich müssen Sie PATCH ausführen

<input name="_method" type="hidden" value="PATCH">

Gleich nach der Form :: Modellzeile

22
Eli

Mein Verdacht ist, dass das Problem in Ihrer Routendefinition liegt. Sie haben die Route als Abrufanforderung definiert, das Formular sendet jedoch wahrscheinlich eine Abrufanforderung. Ändern Sie Ihre Routendefinition.

Route::post('/validate', '[email protected]');

Im Allgemeinen ist es besser, benannte Routen zu verwenden (hilft beim Skalieren, wenn sich die Controller-Methode/-Klasse ändert). 

Route::post('/validate', array('as' => 'validate', 
    'uses' => '[email protected]'));

In dem Formular verwenden Sie das Folgende

<?php echo Form::open(array('route' => 'validate')); ?>
18
Blessing

Ich bin auch auf dieses Problem gestoßen und die anderen Antworten hier waren hilfreich, aber ich verwende einen Route::resource, Der sich um GET, POST und andere Anfragen kümmert.

In meinem Fall habe ich meine Route so belassen:

Route::resource('file', 'FilesController');

Und einfach mein Formular geändert, um es an die Funktion store in meinem FilesController zu senden.

{{ Form::open(array('route' => 'file.store')) }}

Dies hat das Problem behoben, und ich dachte, es lohnt sich, als separate Antwort darauf hinzuweisen, da verschiedene andere Antworten das Hinzufügen einer neuen POST -Route vorschlagen. Dies ist eine Option, aber nicht erforderlich.

12
Dan

Normalerweise passiert MethodNotAllowedHttpException, wenn 

die Routenmethode stimmt nicht überein. 

Angenommen, Sie definieren die Routendatei POST request, senden jedoch GET Request an die Route. 

8

<?php echo Form::open(array('action' => '[email protected]')); ?>

standardmäßig übernimmt Form::open() die Methode POST.

sie haben in Ihren Routen bekommen. Ändern Sie es in der entsprechenden Route in post.

wenn Sie die Methode get verwenden möchten, fügen Sie den Parameter method hinzu.

z.B.

Form::open(array('url' => 'foo/bar', 'method' => 'get'))

7
itachi

Das liegt daran, dass Sie Daten über eine Get-Methode buchen.

Anstatt

Route::get('/validate', '[email protected]');

Versuche dies

Route::post('/validate', '[email protected]lidateCredentials');
6

Ich habe den Fehler gesehen,
Problem war FORM METHODE  

 {{Form :: open (array ('url' => 'admin/doctor/edit /' .$ doctor-> doctor_id, 'class' => 'form-horizontal form-border form-row-stripped') '=>' PUT ',' files '=> true))}} 

es sollte so sein 

 {{Form :: open (array ('url' => 'admin/doctor/edit /' .$ doctor-> doctor_id, 'class' => 'form-horizontal form-border form-row-stripped') '=>' POST ',' files '=> true))}} 
4
Faruk Omar

Im Allgemeinen liegt ein Fehler im verwendeten HTTP-Verb vor, z. B .: ____. Aufruf der PUT-Route mit POST request

3
Slimane MEHARZI

In meinem Fall habe ich eine POST -Anforderung über HTTP an einen Server gesendet, auf dem ich nginx eingerichtet hatte, um alle Anforderungen an Port 80 an Port 443 umzuleiten, auf dem ich die App über HTTPS bediente.

Durch die Anforderung der Anforderung an den richtigen Port wurde das Problem direkt behoben. In meinem Fall musste ich lediglich (http: //) in der Anforderungs-URL (https: //) ersetzen, da ich die Standardports 80 bzw. 443 verwendete.

3
iSWORD

ich hatte auch den gleichen Fehler, aber einen anderen Fix, in meiner XYZ.blade.php hatte ich:

{!! Form::open(array('url' => 'services.store')) !!}

das gab mir den fehler, - ich weiß immer noch nicht warum - aber als ich es geändert habe

{!! Form::open(array('route' => 'services.store')) !!}

es funktionierte!

ich dachte, es lohnt sich zu teilen :)

2
Ahmed Albarody

Mein Problem war nicht, dass meine Routen falsch eingerichtet wurden, sondern dass ich auf die falsche Form-Methode verwiesen habe (die ich aus einem anderen Formular kopiert hatte). Ich habe getan...

{!! Form::model([ ... ]) !!}

(ohne Modell angegeben). Aber ich hätte die normale open-Methode verwenden sollen ...

{!! Form::open([ ... ]) !!}

Da der erste Parameter, der model ein tatsächliches Modell erwartet, keine meiner Optionen angibt, die ich angegeben habe. Ich hoffe, das hilft jemandem, der weiß, dass seine Routen korrekt sind, aber etwas anderes ist falsch.

2
philthathril

gut, als ich dieses Problem hatte, sah ich 2 Codefehler {!! Form::model(['method' => 'POST','route' => ['message.store']]) !!} Ich korrigierte es, indem er dies tat {!! Form::open(['method' => 'POST','route' => 'message.store']) !!}

um es besser zu verstehen, änderte ich die Form model in open und auch die Route wurde falsch in eckige Klammern gesetzt.

0
Fillz Adebayo

In meinem Fall war dies darauf zurückzuführen, dass mein Formular mit einer anderen Middleware an eine Route gesendet wurde. Daher wurde das Senden von Informationen an diese bestimmte Route gesperrt.

0
GabrielFiel

Laravel unterstützt aus Sicherheitsgründen manchmal {!! Form::open(['url' => 'posts/store']) !!} nicht. Deshalb ist der Fehler passiert. Sie können diesen Fehler beheben, indem Sie einfach den folgenden Code ersetzen 

{!! Form::open(array('route' => 'posts.store')) !!}




Fehlercode {!! Form::open(['url' => 'posts/store']) !!}

Korrekter Code {!! Form::open(array('route' => 'posts.store')) !!}

0
Ariful Islam