Я пытаюсь использовать 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(){} }
Кроме того, вы должны действительно следовать шаблону 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
должен фактически сохранять (хранить) новый ресурс в базе данных. Позволяет взять пользователя для ресурса:
index()
: показывает список пользователей create()
Показывает форму, в которой вы вводите свои учетные данные, чтобы создать нового пользователя (формировать сообщения в / пользователь) store()
Сохраняет нового пользователя в базе данных (и перенаправляет, если вы следуете шаблону PRG!) show(1)
: показывает пользователя с идентификатором 1-го профиля edit(1)
: показывает форму, в которой вы можете изменить информацию пользователя 1 (ввести сообщения в / user / 1) update(1)
: (Запрос POST со скрытым полем в Laravel) Обновляет пользователя с идентификатором 1 (f. destroy(1)
: (Запрос POST со скрытым полем в Larvel) Удаляет пользователя с идентификатором 1