формы — Lavavel 5.2.36 MethodNotAllowedHttpException в строке RouteCollection.php 218:

Привет, я довольно новичок в Laravel и пытаюсь реализовать почтовый запрос для простой формы. Я следил за серией руководств YouTube (Laravel 5 | Раздел 3 | Часть 4. Маршрутизация POST-запросов) однако в 5: 46 минут, есть уведомление, что этот метод применим только к версиям до Laravel 5.2.

Я попытался отредактировать метод VerifyCsrfToken.php защищенный $ исключением = [‘api /’]; но это не имеет значения.

Мой фрагмент кода PHP.php:

Route::post('/form-handler', function(\Illuminate\Http\Request $request){
if(isset($request['option']) && $request['firstName'])
{
if(strlen($request['firstName']) > 0){
return view('forms.formResults', ['action' => $request['option'], 'name' => $request['firstName']]);
}
return redirect()->back();
}
return redirect()->back(); // Return user back to the page they came from
})->name('form-handler');

Мой фрагмент кода welcome.blade.php:

<div class="form-group">
<form action="{{route('form-handler')}}" method="post" class="form-control">
<label for="select-action">Select an option:</label>
<select id="select-action" name="option">
<option value="option1">Option1</option>
<option value="option2">Option2</option>
<option value="option3">Option3</option>
</select>
<input type="text" name="firstName">
<button type="submit">Submit Details</button>
<input type="hidden" value="{{Session::token()}}" name="_token"> <!-- Laravel Security Measure, Note name must always be '_token'-->
</form>
</div>

Мое полное сообщение об ошибке:

MethodNotAllowedHttpException in RouteCollection.php line 218:
in RouteCollection.php line 218
at RouteCollection->methodNotAllowed(array('POST')) in RouteCollection.php line 205
at RouteCollection->getRouteForMethods(object(Request), array('POST')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 821
at Router->findRoute(object(Request)) in Router.php line 691
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 49
at Debugbar->handle(object(Request), object(Closure))
at call_user_func_array(array(object(Debugbar), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 53

Является ли этот метод реализации полностью недействительным или ему просто нужно несколько твиков?

Желательно, чтобы я знал, какой оптимальный метод публикации используется для извлечения данных формы, но при этом защищает ваш сайт от подделки межсайтовых запросов.

Любые исправления или альтернативные решения будут высоко оценены.

Пожалуйста, не стесняйтесь просить любые ресурсы, которые я, возможно, пропустил.

Полный rout.php (обратите внимание, я также пытался добавить метод post в группу маршрутизации промежуточного программного обеспечения):

    <?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/

/* Route::get('/', function () {
return view('home.welcome');
}); */

Route::get('/', 'WelcomeController@index')->name('home');

Route::resource('lists', 'ListsController');

Route::get('/contact/{firstName?}', function($firstName = null)
{
return view('about.contact', ['firstName' => $firstName]);
})->name('contact');

Route::get('/blog', function()
{
return view('blog.blog');
})->name('blog');

Route::group(['middleware' => 'auth'], function () {
Route::post('/form-handler', function(\Illuminate\Http\Request $request){
if(isset($request['option']) && $request['firstName'])
{
if(strlen($request['firstName']) > 0){
return view('forms.formResults', ['action' => $request['option'], 'name' => $request['firstName']]); // You create the view
}
return redirect()->back();
}
return redirect()->back(); // Return user back to the page they came from
})->name('form-handler');
});

0

Решение

Отредактированный ответ —

Я отредактировал свой ответ, чтобы сделать более чистый код, который имеет именно то, что вам нужно. вместо использования isset, он использует проверку, которая не остановит выполнение кода, если параметры не установлены. Это также отобразит сообщение об ошибке на виде лезвия.

Ваш файл rout.php должен содержать следующее

Route::post('/form-handler', 'formController@formHandle');

Вид Blade должен иметь форму, которая выглядит следующим образом

@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-group">
<form action="{{route('form-handler')}}" method="post" class="form-control">
<label for="select-action">Select an option:</label>
<select id="select-action" name="option">
<option value="option1">Option1</option>
<option value="option2">Option2</option>
<option value="option3">Option3</option>
</select>
<input type="text" name="firstName">
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
<button type="submit">Submit Details</button>
<input type="hidden" value="{{Session::token()}}" name="_token">
</form>

Контроллер формы должен выглядеть так

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class FormController extends Controller
{
/**
* Logic Goes here.
*
* @param  Request  $request
* @return Response
*/
public function formHandle(Request $request)
{
$this->validate($request, [
'firstName' => 'required|min:1|max:255',
'option' => 'required'
]);

$data = $request;

return view('forms.formResults')->compact($data);
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector