Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всех приветствую!
Только начал изучать laravel и сразу начал биться головой об стол )
Особенно с роутингом, вроде все просто.. но в тоже время то что нужно нигде не описано, два дня гугления ничего не дали (возможно не правильно составляю вопрос)..
Вообщем может кто сталкивался с подобным и знает как реализовать!
Итак у меня есть табличка с записями списка материалов, материал можно снимать с публикации, удалять, делать избранным!
Проблем с этим никаких, но только в том случае когда это действие ставить для каждого поля в конце кнопкой
то есть три кнопки напротив каждой записи, удалить, опубликовать, сделать избранным!
Все прекрасно работает, но теперь нужно сделать действия для группы записей, то есть напротив каждой записи чекбокс, мы выделяем нужные записи, нажимаем одну из кнопок "Удалить", "Опубликовать", "В избранное", и все выделенные записи летят в нужный метод!
И вот тут ступор! В форме у меня скрытое поле допустим input type="hidden" mame="method" value="" при нажатии на эту кнопку подставляется в это поле нужные метод например deleteList или publishList или favList и сабмитится форма!
А вот как все это отловить в роутере, какой action давать форме, и как вызвать нужный метод контроллера из роутера понять увы не могу (
Изменено Alex_D (26.02.2016 13:20:41)
Не в сети
Чекбоксы
<input type="checkbox" name="fav[{{row.id}}]" />
<input type="checkbox" name="delete[{{row.id}}]" />
<input type="checkbox" name="publish[{{row.id}}]" />
отслыаешь все на метод saveList внутри три массива разбираешь
Не в сети
Чекбоксы
<input type="checkbox" name="fav[{{row.id}}]" />
<input type="checkbox" name="delete[{{row.id}}]" />
<input type="checkbox" name="publish[{{row.id}}]" />
отслыаешь все на метод saveList внутри три массива разбираешь
Беда в том что чекбокс должен быть один для каждой записи! Три чекбокса это костыль ещё больше
Тоесть например
<input type="checkbox" name="cid[{{row.id}}]" /> а не три!
Тем более ладно бы было только три кнопки, а кнопок то может быть и 6-ть
"В корзину", "Удалить", "Опубликовать", "Снять с публикации", "В избранное", "Из избранного" не делать же мне 6-ть чекбоксов!
Изменено Alex_D (26.02.2016 13:33:57)
Не в сети
del
Изменено Alex_D (26.02.2016 13:31:09)
Не в сети
Беда в том что чекбокс должен быть один для каждой записи!
Чекбокс априори не может быть один на три действия, может с радио-группой путаешь?
Если кнопки именно нужны, либо радиогруппу кастомизируешь, делаешь похожей на кнопочки, либо по клику пишешь в hidden действие
Три чекбокса это костыль ещё больше
Абсолютно не костыль, групповая обработка действия
Не в сети
Alex_D пишет:Беда в том что чекбокс должен быть один для каждой записи!
Чекбокс априори не может быть один на три действия, может с радио-группой путаешь?
Нет я ничего не путаю приведу пример из админки Joomla CMS
Как видите тут для каждой записи один чекбокс (2)
И группа кнопок (1)!
Кнопки вообще висят вне формы! При нажатии на кнопку в форме в поле @input type="hidden" name="taks" value=""@ подставляется задача, которая завязана на эту кнопку, потом контроллер вызывает нужный метод! В методе обрабатывается cid[] чекбоксы которые отправляют... потом в цикле проход этих записей и удаление в модели!
Не в сети
Ну с этого начинать надо было )
Я по другуму твой интерфейс представлял.
А в чем загвоздка тогда?
сам же описал поведение
При нажатии на кнопку в форме в поле @input type="hidden" name="taks" value=""@ подставляется задача, которая завязана на эту кнопку, потом контроллер вызывает нужный метод! В методе обрабатывается cid[] чекбоксы которые отправляют... потом в цикле проход этих записей и удаление в модели!
Заводишь такой же хидден, и отсылаешь все в сводный метод, где в зависимости от операции дергаешь другой метод. Либо по клику меняшь action форме и самбитишь на нужный роут.
Не в сети
Ну с этого начинать надо было )
Заводишь такой же хидден, и отсылаешь все в сводный метод, где в зависимости от операции дергаешь другой метод. Либо по клику меняшь action форме и самбитишь на нужный роут.
Я же вроде так и написал ))) Может просто сумбурно!
Проблема в том что я не понимаю что в роутере писать, какой action для формы, и как из роутера вызвать нужный метод контроллера!
(или не извращаться и прямо в контроллере в методе index определить какой метод пришел и его дергать?)
Не в сети
ну если раздельный вариант нужен
в routes.php
Route::post('/model/publish', [
'as' => 'model_publish', 'uses' => 'ModelController@publish'
]);
Route::post('/model/delete', [
'as' => 'model_delete', 'uses' => 'ModelController@delete'
]);
в списке
<form action="/model/save">
<button onclick="this.form.action='/model/publish'; this.form.submit()'">Опубликовать</button>
<button onclick="this.form.action='/model/delete'; this.form.submit()'">Удалить</button>
</form>
/model/publish и тп - это твои роуты
Тк они именованные то лучше во вьюхах их писать через хелпер функцию типа route('model_save')
Я просто не помню как вызов функции в blade выглядит, тк с Twig работаю
Тупо писать onclick="" тоже не стоит, заведи js для списка, где повесь события на кнопки по classname или data-аттрибутам
Не в сети
Про то что подменять action у формы я уже думал, но мне не нравится такой подход тем что мне придется для каждого события писать отдельный роутер! Так как систему которую надо написать будет расширяемой, то я боюсь представить сколько будет какая будет потом в файле роутере простыня этих определений, в которых можно будет забудиться..
А хочется один вызов..
пока пытался по action который у формы передать method и в конструкторе контроллера вызвать нужный метод, метод вызывается но потом чистая страница, я так подозреваю что после всего этого мне надо будет сделать редирект, но насколько корректный будет такой подход?
Не в сети
Не отдельный роутер, а только роут, всего лишь маршрут, по сути те же яйца будут, только в профиль, что тебе внутри дефолтного экшена свитч какой то делать, что в роутах описать... Как правильнее, хз я бы все же каждое действие на свой метод и свой роут посадил.
Тем более кол-во групповых действий, которое можно представить над о объектом вполне себе конечно )
я так подозреваю что после всего этого мне надо будет сделать редирект, но насколько корректный будет такой подход?
Правильно, абсолютно корректно
Не в сети
Правильно, абсолютно корректно
Теперь осталось понять как сделать редирект ( Ибо в конструкторе вызов:
return redirect()->action( 'Admin\Patient\PatientsController@index' )->with( 'status', 'complete' );
или
return redirect()->route( 'admin.patients.index' )->with( 'status', 'complete' );
меня никуда не редиректит увы ( просто белый экран
В роутинге только такое:
Route::group( [ 'prefix' => 'admin', 'namespace' => '\Admin\Patient' ], function () {
Route::resource( 'patients', 'PatientsController');
} );
Не в сети
upd. понял, забыл return redirect()->route( 'admin.patients.index' )->with( 'status', 'complete' )->send();
Изменено Alex_D (26.02.2016 15:06:06)
Не в сети
Вроде со всем разобрался ) VitalN благодарю вас за помощь!
Не в сети
Страницы 1