Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.05.2017 06:12:17

Как обработать 3 формы обратной связи.

Доброго времени суток!
В laravel недавно, как и в программировании smile

Версия Laravel в формате 5.4

На одной странице, 3 формы обратной связи.

1. Форма Recall

<form  method="post" action="{{ route('recalls') }}" >
{{ csrf_field() }}

//Здесь форма

</form>

2. Форма Job

 <form  method="post" action="{{ route('jobs') }}">
{{ csrf_field() }}
//Здесь форма
</form>

2. Форма Contact

 <form  method="post" action="{{ route('infos') }}" >
 {{ csrf_field() }}
//Здесь форма
</form>

Как правильно прописать маршруты? Чтобы обработать формы?

   Route::get('/',['as' => 'homes', 'uses' => 'IndexController@show']);
   Route::post('/', ['as' => 'infos', 'uses' => 'IndexController@info']);
   Route::post('/', ['as' => 'recalls', 'uses' => 'IndexController@recall']);
   Route::post('/', ['as' => 'jobs', 'uses' => 'IndexController@job']);

Изменено LesoRub (17.05.2017 06:18:07)

Не в сети

#2 17.05.2017 07:57:36

Re: Как обработать 3 формы обратной связи.

А разве этот код не работает?

Действительно не будет работать. Вот так надо, что бы урл был уникальный для каждой формы.

PHP
   Route::get('/',['as' => 'homes''uses' => 'IndexController@show']);
   
Route::post('/feedback/info', ['as' => 'infos''uses' => 'IndexController@info']);
   
Route::post('/feedback/recall', ['as' => 'recalls''uses' => 'IndexController@recall']);
   
Route::post('/feedback/job', ['as' => 'jobs''uses' => 'IndexController@job']);

Ну и я бы экшены для каждой формы вынес или в общий контроллер FeedbackController или вообще в свой для каждой формы.

Изменено DBR (17.05.2017 08:01:15)

Не в сети

#3 17.05.2017 08:23:30

Re: Как обработать 3 формы обратной связи.

DBR пишет:

}%--А разве этот код не работает?--

Действительно не будет работать. Вот так надо, что бы урл был уникальный для каждой формы.

%%(php)
   Route::get('/',['as' => 'homes', 'uses' => 'IndexController@show']);
   Route::post('/feedback/info', ['as' => 'infos', 'uses' => 'IndexController@info']);
   Route::post('/feedback/recall', ['as' => 'recalls', 'uses' => 'IndexController@recall']);
   Route::post('/feedback/job', ['as' => 'jobs', 'uses' => 'IndexController@job']);
%%

Ну и я бы экшены для каждой формы вынес или в общий контроллер FeedbackController или вообще в свой для каждой формы.

В том то и проблема, страница всего одна smile
Я бы мог отдельно в assets вынести php обработчики формы, и все заработает. Но хотелось бы сделать это средствами laravel.

Изменено LesoRub (17.05.2017 08:25:13)

Не в сети

#4 17.05.2017 10:14:31

Re: Как обработать 3 формы обратной связи.

нет, DBR всё правильно пишет. обработчики не являются страницами как таковыми – они могут получить данные, сохранить их и отредиректить пользователя обратно на ту же страницу, с которой была сделана отправка. страница на сайте будет одна, а маршрутов много.

потом можно (или даже нужно!) будет отправку сделать аяксом на те же адреса и просто в обработчике проверять что если отправлено аяксом – отдавать json-ответ а если нет – редирект

Не в сети

#5 17.05.2017 13:13:57

Re: Как обработать 3 формы обратной связи.

Если сильно хочется чтобы путь был именно ’/’ — вместо Route::post можно использовать еще Route::put и Route::delete (естественно метод надо в форе указать). Но мне кажется, это от лукавого.

Не в сети

#6 17.05.2017 19:27:11

Re: Как обработать 3 формы обратной связи.

mavsan пишет:

Если сильно хочется чтобы путь был именно '/' - вместо Route::post можно использовать еще Route::put и Route::delete (естественно метод надо в форе указать). Но мне кажется, это от лукавого.

Можно, но это извращение! )

Изменено DBR (17.05.2017 19:29:22)

Не в сети

#7 17.05.2017 19:29:09

Re: Как обработать 3 формы обратной связи.

  1. В том то и проблема, страница всего одна

Нет разницы сколько страниц.

Или тебя смущает, что после отправки данных ты оказываешься на каком-то странном адресе типа «/feedback/job» а хотел бы оказаться на главной странице?

Так сделай редирект

return redirect(’/’);

Не в сети

Подвал раздела