laravel throwing MethodNotAllowedHttpException

Ik probeer iets heel basaals aan de gang te krijgen. Ik ben gewend aan CI en leer nu Laravel 4, en hun documenten maken het niet gemakkelijk! Hoe dan ook, ik probeer een aanmeldingsformulier te maken en zorg ervoor dat de gegevens met succes worden gepost door het in het volgende formulier af te drukken. Ik krijg deze uitzondering:

Symfony \ Component \ HttpKernel \ Uitzondering \
MethodNotAllowedHttpException

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

en routes heeft:

Route::get('/', function()
{
    return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');

en tot slot heeft mijn weergave login.php deze vormrichting:

<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

Alle hulp wordt zeer op prijs gesteld.


Antwoord 1, autoriteit 100%

U krijgt die fout omdat u op een GETroute.

Ik zou uw routing opsplitsen voor validatein een afzonderlijke GETEN POSTRoutes.

Nieuwe routes:

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

Dan kan uw controllermethode gewoon

zijn

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

Antwoord 2, Autoriteit 13%

Mijn vermoeden is het probleem dat in de definitie van uw routebeschrijving ligt.

U definieerde de route als een GETverzoek, maar het formulier is waarschijnlijk een POSTaanvragen. Wijzig de definitie van uw route om overeen te komen met de aanvraagmethode van het formulier.

Route::post('/validate', [MemberController::class, 'validateCredentials']);

Het is over het algemeen betere praktijk om de naam routes te gebruiken (helpt om te schalen als de controller methode / klasse verandert).

Route::post('/validate', [MemberController::class, 'validateCredentials'])
    ->name('member.validateCredentials');

Gebruik in de weergave de validatieroute als de actie van het formulier.

<form action="{{ route('member.validateCredentials') }}" method="POST">
  @csrf
...
</form>

Antwoord 3, Autoriteit 12%

Het probleem is dat de u gebruikt POSTmaar eigenlijk moet u PATCHuitvoeren
Om dit toe te voegen

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

net na de Form::modelLINE


Antwoord 4, Autoriteit 6%

Dat is omdat u gegevens boekt via een GET-methode.

in plaats van

Route::get('/validate', 'MemberController@validateCredentials');

Probeer dit

Route::post('/validate', 'MemberController@validateCredentials');

Antwoord 5, Autoriteit 6%

Ik heb ook dit probleem tegengekomen en de andere antwoorden hier waren behulpzaam, maar ik gebruik een Route::resourcedie zorgt voor GET, POST, en andere verzoeken.

In mijn geval liet ik mijn route achter zoals het is:

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

en gewijzigd eenvoudig mijn formulier om in te dienen bij de storeFunctie in mijn FilesController

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

Dit heeft het probleem opgelost en ik dacht dat het de moeite waard was om te wijzen als een afzonderlijk antwoord, aangezien verschillende andere antwoorden suggereren met het toevoegen van een nieuwe POSTroute. Dit is een optie, maar het is niet nodig.


Antwoord 6, Autoriteit 5%

Typisch MethodNotAllowedHttpExceptiongebeurt wanneer

Routemethode komt niet overeen.

Stel dat u een POST-verzoekroutebestand definieert, maar u stuurt een GET-verzoek naar de route.


Antwoord 7, autoriteit 4%

<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

standaard gaat Form::open()uit van een POST-methode.

je hebt GETin je routes. verander het in POSTin de corresponderende route.

of als je de GETmethode wilt gebruiken, voeg dan de methodparameter toe.

bijv.

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

Antwoord 8, autoriteit 2%

Ik heb te maken gehad met de fout,
probleem was VORMMETHODE

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

Het zou zo moeten zijn

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

Antwoord 9, autoriteit 2%

In mijn geval stuurde ik een POST-verzoek via HTTPnaar een server waar ik Nginxhad ingesteld om alle verzoeken om te leiden naar poort 80naar poort 443waar ik de app bediende via HTTPS.

Door het verzoek naar de juiste poort te sturen, werd het probleem direct opgelost. In mijn geval hoefde ik alleen http://in de verzoek-URL te vervangen door https://aangezien ik de standaardpoorten 80en 443respectievelijk.


Antwoord 10, autoriteit 2%

Over het algemeen is er een fout in het gebruikte HTTP-werkwoord, bijvoorbeeld:

Route PUTbellen met POST-verzoek


Antwoord 11

Mijn probleem was niet dat mijn routes verkeerd waren ingesteld, maar dat ik verwees naar de verkeerde Form-methode (die ik van een ander formulier had gekopieerd). Ik was aan het doen…

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

(zonder model gespecificeerd). Maar ik had de normale open-methode moeten gebruiken…

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

Omdat de eerste parameter voor modeleen echt model verwacht, kreeg het geen van mijn opties die ik specificeerde. Ik hoop dat dit iemand helpt die weet dat hun routes correct zijn, maar er is iets anders mis.


Antwoord 12

Ik had ook dezelfde fout maar had een andere oplossing, in mijn XYZ.blade.phphad ik:

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

waardoor ik de fout kreeg, – ik weet nog steeds niet waarom, maar toen ik het veranderde in

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

Het werkte!

Ik vond het de moeite waard om te delen 🙂


Antwoord 13

Laravel ondersteunt soms {!! Form::open(['url' => 'posts/store']) !!}om veiligheidsredenen. Daarom is de fout opgetreden. U kunt deze fout oplossen door simpelweg de onderstaande code te vervangen

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

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

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


Antwoord 14

In mijn geval was het omdat mijn formulier naar een route met een andere middleware stuurde. Dus het blokkeerde het verzenden van informatie naar deze specifieke route.


Antwoord 15

nou, toen ik deze problemen had, kreeg ik te maken met 2 codefouten

{!! Form::model(['method' => 'POST','route' => ['message.store']]) !!}

ik heb het gecorrigeerd door dit te doen

{!! Form::open(['method' => 'POST','route' => 'message.store']) !!}

dus alleen om te expatiëren heb ik het formulier modelveranderd in openen ook de route was verkeerd tussen vierkante haken geplaatst.


Antwoord 16

Zoals hierbeantwoord door rebduvidje kunt Route::matchgebruiken zoals hieronder

Route::match(['get', 'post'], 'results',[
        'as' => 'results_path',
        'uses' => 'SearchController@results' ]);

werk de parameters bij volgens uw logica


Antwoord 17

// not done
Route::post('`/posts/{id}`', 'PostsController@store')->name('posts.store');
return redirect('`/posts'`)->with('status','Post was created !');
// done
Route::post('`/posts`', 'PostsController@store')->name('posts.store');
return redirect('`/posts'`)->with('status','Post was created !');

Other episodes