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 GET
route.
Ik zou uw routing opsplitsen voor validate
in een afzonderlijke GET
EN POST
Routes.
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 GET
verzoek, maar het formulier is waarschijnlijk een POST
aanvragen. 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 POST
maar eigenlijk moet u PATCH
uitvoeren
Om dit toe te voegen
<input name="_method" type="hidden" value="PATCH">
net na de Form::model
LINE
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::resource
die 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 store
Functie 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 POST
route. Dit is een optie, maar het is niet nodig.
Antwoord 6, Autoriteit 5%
Typisch MethodNotAllowedHttpException
gebeurt 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 GET
in je routes. verander het in POST
in de corresponderende route.
of als je de GET
methode wilt gebruiken, voeg dan de method
parameter 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 HTTP
naar een server waar ik Nginx
had ingesteld om alle verzoeken om te leiden naar poort 80
naar poort 443
waar 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 80
en 443
respectievelijk.
Antwoord 10, autoriteit 2%
Over het algemeen is er een fout in het gebruikte HTTP-werkwoord, bijvoorbeeld:
Route PUT
bellen 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 model
een 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.php
had 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 model
veranderd in open
en 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 !');