Laravel по-русски

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

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

#1 26.02.2016 13:20:06

Вопрос по роутингу!

Всех приветствую!
Только начал изучать laravel и сразу начал биться головой об стол )
Особенно с роутингом, вроде все просто.. но в тоже время то что нужно нигде не описано, два дня гугления ничего не дали (возможно не правильно составляю вопрос)..
Вообщем может кто сталкивался с подобным и знает как реализовать!
Итак у меня есть табличка с записями списка материалов, материал можно снимать с публикации, удалять, делать избранным!
Проблем с этим никаких, но только в том случае когда это действие ставить для каждого поля в конце кнопкой
то есть три кнопки напротив каждой записи, удалить, опубликовать, сделать избранным!
Все прекрасно работает, но теперь нужно сделать действия для группы записей, то есть напротив каждой записи чекбокс, мы выделяем нужные записи, нажимаем одну из кнопок "Удалить", "Опубликовать", "В избранное", и все выделенные записи летят в нужный метод!
И вот тут ступор! В форме у меня скрытое поле допустим input type="hidden" mame="method" value="" при нажатии на эту кнопку подставляется в это поле нужные метод например deleteList или publishList или favList и сабмитится форма!
А вот как все это отловить в роутере, какой action давать форме, и как вызвать нужный метод контроллера из роутера понять увы не могу (

Изменено Alex_D (26.02.2016 13:20:41)

Не в сети

#2 26.02.2016 13:24:48

Re: Вопрос по роутингу!

Чекбоксы
<input type="checkbox"  name="fav[{{row.id}}]" />
<input type="checkbox"  name="delete[{{row.id}}]" />
<input type="checkbox"  name="publish[{{row.id}}]" />
отслыаешь все  на метод saveList внутри три массива разбираешь

Не в сети

#3 26.02.2016 13:30:11

Re: Вопрос по роутингу!

VitalN пишет:

Чекбоксы
<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)

Не в сети

#4 26.02.2016 13:30:53

Re: Вопрос по роутингу!

del

Изменено Alex_D (26.02.2016 13:31:09)

Не в сети

#5 26.02.2016 13:52:08

Re: Вопрос по роутингу!

Alex_D пишет:

Беда в том что чекбокс должен быть один для каждой записи!

Чекбокс априори не может быть один на три действия, может с радио-группой путаешь?
Если кнопки именно нужны, либо радиогруппу кастомизируешь, делаешь похожей на кнопочки, либо по клику пишешь в hidden действие

Alex_D пишет:

Три чекбокса это костыль ещё больше

Абсолютно не костыль, групповая обработка действия

Не в сети

#6 26.02.2016 14:12:49

Re: Вопрос по роутингу!

VitalN пишет:
Alex_D пишет:

Беда в том что чекбокс должен быть один для каждой записи!

Чекбокс априори не может быть один на три действия, может с радио-группой путаешь?

Нет я ничего не путаю приведу пример из админки Joomla CMS
654beb739b.jpg
Как видите тут для каждой записи один чекбокс (2)
И группа кнопок (1)!
Кнопки вообще висят вне формы! При нажатии на кнопку в форме в поле @input type="hidden" name="taks" value=""@ подставляется задача, которая завязана на эту кнопку, потом контроллер вызывает нужный метод! В методе обрабатывается cid[] чекбоксы которые отправляют... потом в цикле проход этих записей и удаление в модели!

Не в сети

#7 26.02.2016 14:17:33

Re: Вопрос по роутингу!

Ну с этого начинать надо было )
Я по другуму  твой интерфейс  представлял.
А в чем  загвоздка тогда?
сам же  описал поведение

При нажатии на кнопку в форме в поле @input type="hidden" name="taks" value=""@ подставляется задача, которая завязана на эту кнопку, потом контроллер вызывает нужный метод! В методе обрабатывается cid[] чекбоксы которые отправляют... потом в цикле проход этих записей и удаление в модели!

Заводишь такой же хидден, и отсылаешь все в  сводный метод, где  в зависимости от операции  дергаешь другой метод. Либо по клику меняшь action форме и самбитишь на нужный роут.

Не в сети

#8 26.02.2016 14:20:11

Re: Вопрос по роутингу!

VitalN пишет:

Ну с этого начинать надо было )
Заводишь такой же хидден, и отсылаешь все в  сводный метод, где  в зависимости от операции  дергаешь другой метод. Либо по клику меняшь action форме и самбитишь на нужный роут.

Я же вроде так и написал ))) Может просто сумбурно!
Проблема в том что я не понимаю что в роутере писать, какой action для формы, и как из роутера вызвать нужный метод контроллера!
(или не извращаться и прямо в контроллере в методе index  определить какой метод пришел и его дергать?)

Не в сети

#9 26.02.2016 14:32:15

Re: Вопрос по роутингу!

ну если раздельный вариант нужен
в 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-аттрибутам

Не в сети

#10 26.02.2016 14:49:44

Re: Вопрос по роутингу!

Про то что подменять action у формы я уже думал, но мне не нравится такой подход тем что мне придется для каждого события писать отдельный роутер! Так как систему которую надо написать будет расширяемой, то я боюсь представить сколько будет какая будет потом в файле роутере простыня этих определений, в которых можно будет забудиться..
А хочется один вызов..
пока пытался по action который у формы передать method и в конструкторе контроллера вызвать нужный метод, метод вызывается но потом чистая страница, я так подозреваю что после всего этого мне надо будет сделать редирект, но насколько корректный будет такой подход?

Не в сети

#11 26.02.2016 14:55:24

Re: Вопрос по роутингу!

Не отдельный роутер, а только роут, всего лишь маршрут, по сути те же яйца будут, только в профиль, что тебе внутри дефолтного экшена свитч какой то делать, что в роутах описать... Как правильнее, хз я бы  все же каждое действие на свой метод и свой роут посадил.
Тем более кол-во групповых  действий, которое можно представить над о объектом вполне себе конечно )

Alex_D пишет:

я так подозреваю что после всего этого мне надо будет сделать редирект, но насколько корректный будет такой подход?

Правильно, абсолютно корректно

Не в сети

#12 26.02.2016 15:02:57

Re: Вопрос по роутингу!

VitalN пишет:

Правильно, абсолютно корректно

Теперь осталось понять как сделать редирект ( Ибо в конструкторе вызов:
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');
} );

Не в сети

#13 26.02.2016 15:05:47

Re: Вопрос по роутингу!

upd. понял, забыл return redirect()->route( 'admin.patients.index' )->with( 'status', 'complete' )->send();

Изменено Alex_D (26.02.2016 15:06:06)

Не в сети

#14 26.02.2016 15:13:39

Re: Вопрос по роутингу!

Вроде со всем разобрался ) VitalN благодарю вас за помощь!

Не в сети

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