Маршрутизация Laravel не работает с почтой

Я пытаюсь использовать RESTful Routing в Laravel, и я сталкиваюсь с следующей проблемой. Моя страница состоит из 2 выпадающих списков и кнопки отправки. При первой загрузке страницы функция show () в контроллере заполняет оба выпадающих списка результатами из двух запросов к базе данных. После того, как я выбрал значение в каждом раскрывающемся списке и нажал кнопку отправки, мне бы хотелось, чтобы страница отображала результаты другого запроса в виде таблицы.

Мой метод show () работает, поскольку выпадающие списки заполняются так, как должны. Я использовал метод store () для обработки сообщения (после попадания в submit), но вместо этого он дает мне пустую страницу.

Маршрут:

Route::resource('web_tools', 'WebController'); 

контроллер:

  class WebController extends BaseController { public function show() { $filters = WebToolsPage::QueryFilters(); $category = WebToolsPage::QueryCategory(); return View::make('top_pages.table', ['Filter'=>$filters, 'Category'=>$category]); } public function store() { $filt = Input::get('filt'); $cat = Input::get('cat'); $filters = WebToolsPage::QueryFilters(); $category = WebToolsPage::QueryCategory(); $query = WebToolsPage::QueryTable($filt, $kat); return View::make('top_pages.table', ['Webmasters'=>$query,'Filter'=>$filters, 'Category'=>$category]); } public function index(){} public function create(){} } 

Посмотреть:

  {{Form::open()}} {{ Form::select('filt', $Filter) }} {{ Form::select('kat', $Kategorie) }} {{ Form::Submit('Filter') }} ...... {{Form::close()}} 

Моя модель содержит 3 Запроса, 2 для выпадающих списков и 1 для вызова таблицы во втором методе контроллера. Я также хотел бы упомянуть, что все работает отлично, когда я использую Route :: controller (…). И поскольку я получал ошибки о методах, отсутствующих в моем контроллере, я просто пошел дальше и определил эти методы и оставил их пустыми (?). Любая помощь будет принята с благодарностью.

Поэтому я решил проблему с пустой страницей, добавив имя маршрута и имя метода контроллера, которое должно было вызываться после POST для аргумента метода Form :: open ().

Как это:

  {{Form::open(['route' => 'web_tools.store'])}} {{ Form::select('filt', $Filter) }} {{ Form::select('kat', $Kategorie) }} {{ Form::Submit('Filter') }} ...... {{Form::close()}} 

Теперь я могу видеть таблицу, но единственная проблема заключается в том, что URI теперь не включает имя действия.

я хотел:

  .../web_tools/store 

но теперь имеют:

  .../web_tools 

Кто-нибудь с советами?

У ресурса не должно быть имени метода в URL-адресе. Когда вы выполняете POST -request в /web_tools , /web_tools метод store() . Если вы выполните GET , GET index() . Обратитесь к таблице в документации Laravel : Находчивые контроллеры

Явное обозначение маршрута

Если вам требуется явное присвоение имен, вам нужно будет зарегистрировать его как контроллер и использовать шаблон именования метода RESTful:

В ваших routes.php :

 Route::controller('web_tools', 'WebController'); 

и в вашем WebController.php :

 class WebController extends BaseController { public function getShow() { $filters = WebToolsPage::QueryFilters(); $category = WebToolsPage::QueryCategory(); return View::make('top_pages.table', ['Filter'=>$filters, 'Category'=>$category]); } public function postStore() { $filt = Input::get('filt'); $cat = Input::get('cat'); $filters = WebToolsPage::QueryFilters(); $category = WebToolsPage::QueryCategory(); $query = WebToolsPage::QueryTable($filt, $kat); return View::make('top_pages.table', ['Webmasters'=>$query,'Filter'=>$filters, 'Category'=>$category]); } public function getIndex(){} public function getCreate(){} } 

Шаблон Post / Redirect / Get

Кроме того, вы должны действительно следовать шаблону PRG (Post / Redirect / Get). В вашем методе store () то, что вы на самом деле хотите сделать, следующее:

  public function store() { $filt = Input::get('filt'); $cat = Input::get('cat'); //Store whatever you want to store return Redirect::action(self::class."@index"); } 

Находчивая маршрутизация в целом

Во-первых, я думаю, вы неправильно поняли находчивые контроллеры и маршрутизацию. Они используются для ресурсов (т. Е. Что-то, представленное в базе данных, пользователей, сообщений, комментариев и т. Д.), Поэтому метод- store должен фактически сохранять (хранить) новый ресурс в базе данных. Позволяет взять пользователя для ресурса:

  • GET / user: index() : показывает список пользователей
  • GET / user / create: create() Показывает форму, в которой вы вводите свои учетные данные, чтобы создать нового пользователя (формировать сообщения в / пользователь)
  • POST / user: store() Сохраняет нового пользователя в базе данных (и перенаправляет, если вы следуете шаблону PRG!)
  • GET / user / 1: show(1) : показывает пользователя с идентификатором 1-го профиля
  • GET / user / 1 / edit: edit(1) : показывает форму, в которой вы можете изменить информацию пользователя 1 (ввести сообщения в / user / 1)
  • PUT / user / 1: update(1) : (Запрос POST со скрытым полем в Laravel) Обновляет пользователя с идентификатором 1 (f.
  • DELETE / user / 1: destroy(1) : (Запрос POST со скрытым полем в Larvel) Удаляет пользователя с идентификатором 1