Skip to content

Кастомные действия таблицы

Свои кнопки на строках таблицы: «одобрить», «отправить», «пересчитать» — всё, чего нет в стандартном наборе «создать, изменить, удалить».

Как завести

У таблицы:

  • Контроллер действий — класс из PageBlocks\App\Http\Controllers, который их обрабатывает;
  • Действия — сам список. Каждой записи нужны label и method, и она может указать свой controller, перекрыв табличный.

Метод получает запрос. Отмеченные строки приезжают в ids списком через запятую, а id держит первую из них — построчному действию этого достаточно.

php
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(), и его результат станет кнопками. См. Фильтрацию.

И то и другое необязательно и независимо — контроллер может реализовать любое, оба или ничего.

© PageBlocks 2019-present