- Класс
\SleepingOwl\Admin\Form\FormDefault
- View
resources\views\default\form\default.blade.php
Данный тип формы выводит элементы без дизайна. При желании внешний вид формы можно настроит с помощью HTML атрибутов
$form = AdminForm::form()->setElements([
AdminFormElement::text('title', 'Title'),
]);
$form->addElement(
AdminFormElement::date('created_at', 'Created at')
);
$form->setHtmlAttribute('class', 'panel panel-default');
$form->getButtons()->setHtmlAttribute('class', 'panel-footer');
в основе которой лежит Bootstrap конпонент panel
- Класс
\SleepingOwl\Admin\Form\FormPanel
- View
resources\views\default\form\panel.blade.php
Данный тип формы автоматически добавляет к форме html атрибут class="panel panel-default"
и к кнопкам формы class="panel-footer"
и позволяет размещать элементы формы в блоки header
, body
, footer
$form = AdminForm::panel()
->addHeader([
AdminFormElement::text('title', 'Title'),
])
->addBody(
AdminFormElement::wysiwyg('text', 'Text', 'ckeditor')->required()
)
->addFooter(
AdminFormElement::select('type', 'Type'), ...)
);
$form->addItem(AdminFormElement::date('created_at', 'Created at'));
$form->addElement(AdminFormElement::date('created_at', 'Created at')); // Поместит элемент без блока
$form->setElements([
AdminFormElement::date('created_at', 'Created at')
]); // Поместит список элементов без блока
Блоки формы - это классы, реализующие интерфейс SleepingOwl\Admin\Contracts\Form\PanelInterface
, при необходимости вы можете создать свой класс блока и добавлять его в форму:
$form->addElement(new \App\Form\Panel\CustomBlockClass([
AdminFormElement::text('title', 'Title')
]));
Добавление элемента в форму. Если в форме уже есть блоки (header
, body
, footer
), то элемент будет добавлен в последний добавленый блок, если блоков нет, то будет создан блок body
и в него помещен элемент.
SleepingOwl\Admin\Form\FormDefault::addItem(mixed $item): return self
Добавление элементов в блок panel-heading
SleepingOwl\Admin\Form\FormPanel::addHeader(array|\SleepingOwl\Admin\Contracts\FormElementInterface $items): return self
Добавление элементов в блок panel-body
. Если предыдущий блок body
, то между ними будет вставлен элемент <hr />
SleepingOwl\Admin\Form\FormPanel::addBody(array|\SleepingOwl\Admin\Contracts\FormElementInterface $items): return self
Добавление элементов в блок panel-footer
SleepingOwl\Admin\Form\FormPanel::addFooter(array|\SleepingOwl\Admin\Contracts\FormElementInterface $items): return self
Разновидность форм, в которой элементы можно разделять на вкладки.
AdminForm::tabbed()->setElements([
'tab1' => [
....
],
'tab2' => [
....
]
]);
В классах форм используется трейт:
- HtmlAttributes, с помощью которого для них можно настраивать HTML атрибуты.
- Assets, с помощью которого для них можно подключать ассеты.
Указание класса отвечающего за вывод кнопок формы. По умолчанию SleepingOwl\Admin\Form\FormButtons
SleepingOwl\Admin\Form\FormDefault::setButtons(\SleepingOwl\Admin\Contracts\FormButtonsInterface $buttons): return self
Указание view отвечающего за вывод формы
SleepingOwl\Admin\Form\FormDefault::setView(\Illuminate\View\View|string $view): return self
Указание ссылки, на которую будут отправлены данные формы.
SleepingOwl\Admin\Contracts\FormInterface::setAction(string $action): return self
Добавление массива элементов в форму
SleepingOwl\Admin\Contracts\Form\ElementsInterface::setElements(array $elements): return self
Добавление элемента в форму
SleepingOwl\Admin\Form\FormElements::addElement(mixed $element): return self
в случае необходимости можно использовать колонки таблиц
AdminForm::form()->setElements([
AdminFormElement::upload('image', 'Image'), // Элемент загрузки картинки
AdminColumn::image('image', 'Image') // Вывод загружененой картинки
])
Вы можете в качестве элемента формы помещать табы. Делайте названия табов уникальные при размещении несколько разделов со вкладками, т.к. табы могут включаться некорректно.
$tabs = AdminDisplay::tabbed();
$tabs->setTabs(function ($id) {
$tabs = [];
$tabs[] = AdminDisplay::tab(AdminForm::elements([
AdminFormElement::text('title', 'Title')->required(),
]))->setLabel('SEO');
$tabs[] = AdminDisplay::tab(new \SleepingOwl\Admin\Form\FormElements([
AdminFormElement::date('created_at', 'Created at')->required()
]))->setLabel('Dates');
return $tabs;
});
$tabs->appendTab([
AdminFormElement::text('title', 'Title')->required(),
], 'Tab 1');
$tabs1 = AdminDisplay::tabbed();
$tabs1 = ....;
AdminForm::form()
->addElement($tabs)
->setElements([
AdminFormElement::upload('image', 'Image'), // Элемент загрузки картинки
AdminColumn::image('image', 'Image') // Вывод загружененой картинки
])
->addElement($tabs1);
// or
$form = AdminForm::panel()
->addHeader([
$tabs
]);
// or
$form = AdminForm::panel()
->setElements([
AdminFormElement::upload('image', 'Image'),
$tabs
]);
Позволяет разбивать форму на несколько столбцов. Колонки могут быть использованы в табах и наоборот.
$columns = AdminFormElement::columns([
[
AdminFormElement::text('title', 'Title')->required()
],
// or
function() {
return [
AdminFormElement::text('title', 'Title')->required()
];
},
// or
new \SleepingOwl\Admin\Form\Columns\Column([
AdminFormElement::date('created_at', 'Created At')->required()
])
]);
$columns->addColumn([
AdminFormElement::date('created_at', 'Created At')->required()
]);
// or
$columns->addColumn(function() {
return [
AdminFormElement::date('created_at', 'Created At')->required()
];
});
// or
$columns->addColumn(new \SleepingOwl\Admin\Form\Columns\Column([
AdminFormElement::date('created_at', 'Created At')->required()
]));
$columns->addColumn($subColumns = AdminFormElement::columns([
[
AdminFormElement::text('description', 'Description')
]
]);
$subColumns->addColumn(...)
$form = AdminForm::panel()->addBody($columns);
$tabs = AdminDisplay::tabbed([
'Tab 1' => new FormElements([
AdminFormElement::text('title', 'Title')->required()
]),
'Tab 2' => new FormElements([
AdminFormElement::select('type', 'Type'),
AdminFormElement::date('event_at', 'Event at')->setFormat('Y-m-d H:i:00')
])
]);
$columns = AdminFormElement::columns();
$columns->addColumn([$tabs]);
$columns->addColumn([
AdminFormElement::date('created_at', 'Created at')
]);
// Or
$tabs->appendTab(new FormElements([$columns]));