Как использовать тег формы в laravel

Я хочу использовать тег формы в структуре laravel, как показано ниже.

<form method="post" action="<?php echo 'SongController@savenew';?>">

но после отправки выдает ошибку

TokenMismatchException в строке 53 VerifyCsrfToken.php:


person Khaled Elkhamisy    schedule 28.07.2015    source источник


Ответы (3)


Вам необходимо включить в форму токен CSRF следующим образом:

Laravel упрощает защиту вашего приложения от подделок межсайтовых запросов. Подделка межсайтовых запросов — это тип вредоносного эксплойта, при котором несанкционированные команды выполняются от имени пользователя, прошедшего проверку подлинности.

Laravel автоматически генерирует токен CSRF для каждого активного пользовательского сеанса, управляемого приложением. Этот токен используется для проверки того, что аутентифицированный пользователь действительно делает запросы к приложению. Чтобы сгенерировать скрытое поле ввода _token, содержащее токен CSRF, вы можете использовать вспомогательную функцию csrf_field:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
person Anonymous    schedule 28.07.2015
comment
Пожалуйста, напишите пример полной формы. Я делаю то, что вы предложили, но это дает мне еще одну ошибку MethodNotAllowedHttpException в строке RouteCollection.php 201: - person Khaled Elkhamisy; 29.07.2015

Запрос формы Laravel всегда требует токена csrf

Использовал

<Form method="post" action="">
{{ csrf_field() }}
</Form>
person Sagar Shinde    schedule 02.01.2018

Вам нужно использовать конструктор форм Laravel. Поскольку для этого требуется токен CSRF (подделка межсайтовых запросов), но когда вы создаете форму вручную, токен не добавляется в html, вам нужно добавить токен вручную ie. <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">, но немного безопаснее использовать стандарт Laravel :

<?= Form::open(['controller' => 'SongController@savenew', 'method' => 'POST']); ?>

<?= Form::close(); ?>

Если вы используете блейд (рекомендуется):

{!! Form::open(['controller' => 'SongController@savenew', 'method' => 'POST']) !!}

{!! Form::close(); !!}
person backend_dev_123    schedule 28.07.2015
comment
Form не является стандартом Laravel 5. Это было брошено Тейлором. OP может выбрать laravelcollective/html в Laravel 5. - person user2094178; 28.07.2015
comment
Когда я изучал последний туториал по laravel 5 на tutsplus, мне рекомендовали именно этот способ. Есть идеи, почему это было брошено? - person backend_dev_123; 28.07.2015
comment
Тейлор прокомментировал в подкасте, что фасады Form и Html — это всего лишь генераторы html-сниппетов, и в конечном итоге они вызывают сильное мнение сообщества. Неважно, как вы это сделаете, массы будут все время жаловаться. Это не стоило времени и сил. - person user2094178; 29.07.2015
comment
Коллектив Laravel был прекращен :( - person josterricardo; 12.03.2019