Кастомные действия таблицы
Свои кнопки на строках таблицы: «одобрить», «отправить», «пересчитать» — всё, чего нет в стандартном наборе «создать, изменить, удалить».
Как завести
У таблицы:
- Контроллер действий — класс из
PageBlocks\App\Http\Controllers, который их обрабатывает; - Действия — сам список. Каждой записи нужны
labelиmethod, и она может указать свойcontroller, перекрыв табличный.
Метод получает запрос. Отмеченные строки приезжают в ids списком через запятую, а id держит первую из них — построчному действию этого достаточно.
namespace PageBlocks\App\Http\Controllers;
use Boshnik\PageBlocks\Http\Request;
class OrderActions extends BaseController
{
public function approve(Request $request)
{
$ids = array_filter(explode(',', (string) $request->get('ids')));
Order::whereIn('id', $ids)->update(['approved' => 1]);
return response()->success('Одобрено: ' . count($ids));
}
}Запуститься может только то, что перечислено у таблицы
Запрос несёт индекс в сохранённом списке действий, а не имя метода. Компонент находит запись у таблицы, берёт контроллер и метод оттуда и проверяет оба по [A-Za-z0-9_]+.
Это модель безопасности, а не формальность
Имя метода в запросе означало бы, что из менеджера вызывается любой публичный метод любого контроллера. Раз источник истины — список, добавление метода в контроллер само по себе ничего не открывает: его сперва надо перечислить у таблицы.
Запись без label или без method пропускается, а не рисуется сломанной кнопкой.
Быстрые фильтры живут в том же контроллере
Тот же класс может давать фильтры в тулбар: добавьте метод quickFilters(), и его результат станет кнопками. См. Фильтрацию.
И то и другое необязательно и независимо — контроллер может реализовать любое, оба или ничего.