Формы
Форма может быть любым из поддерживаемых способов вывода списка, формой с табами или самой формой. Вы можете комбинировать их по желанию.
..->createAndEdit(function ()
{
$form = AdminForm::form();
$form->items([
// здесь описание элементов формы
]);
return $form;
})
Форма с табами
..->createAndEdit(function ()
{
$form = AdminForm::tabbed();
$form->items([
'Main Tab Label' => [
// здесь описание элементов формы
],
'Second Tab Label' => [
// здесь описание элементов формы
],
]);
return $form;
})
Элементы формы
Вы можете создавать элементы формы следующим кодом:
FormItem::{type}('{field name}', '{label}')
Поддерживаемые элементы формы
- columns
- text
- textaddon
- hidden
- checkbox
- date
- time
- timestamp
- file
- image
- images
- select
- multiselect
- radio
- textarea
- ckeditor
- custom
- view
Валидация
FormItem::text('title')->required()->unique()->validationRule('my-custom-rule')
Подробнее смотрите раздел валидация.
Значение по умолчанию
Вы можете указать значение по умолчанию для элемента формы.
FormItem::text('title')->defaultValue('My new item title')
Регистрация собственного элемента формы
Вы можете регистрировать собственные элементы формы в файле bootstrap.php
в директории bootstrapDirectory
(по умолчанию app/admin/bootstrap.php
).
FormItem::register('{type}', 'App\MyFormItem')
Ваш класс должен расширять SleepingOwl\Admin\FormItems\BaseFormItem
(если вам не нужно получание значения модели по названия) или SleepingOwl\Admin\FormItems\NamedFormItem
(в противном случае).
Добавление скриптов и стилей
Вы можете добавить свои скрипты и стили на страницу, которая использует ваш элемент формы.
public function initialize()
{
parent::initialize();
AssetManager::addScript(asset('my.js'));
AssetManager::addStyle(asset('my.css'));
}
Пример
bootstrap.php
FormItem::register('myItem', 'Acme\MyItem')
Acme/MyItem.php
use SleepingOwl\Admin\FormItems\NamedFormItem;
class MyItem extends NamedFormItem
{
public function render()
{
$params = $this->getParams();
// $params will contain 'name', 'label', 'value' and 'instance'
return view('my-form-item-view, $params);
}
}
Использование в конфигурации модели
FormItem::myItem('field')->label('My Label');
Columns
Позволяет разбивать форму на несколько столбцов. Используйте метод columns()
для указания столбцов.
FormItem::columns()->columns([
[
FormItem::...
],
[
...
],
])
Text
Создает текстовое поле.
FormItem::text('title', 'Title')
Textaddon
Создает текстовое поле с вставкой вначале или вконце.
По умолчанию расположение вставки - before
.
FormItem::textaddon('url', 'Url')->addon('http://my-site.com/')->placement('before')
FormItem::textaddon('price', 'Price')->addon('$')->placement('after')
Hidden
Создает скрытое поле. Полезно в связке с параметрами вида (подробнее).
FormItem::hidden('field')
Checkbox
Создает checkbox с заголовком.
FormItem::checkbox('active', 'Active')
Date
Создает поле выбора даты.
FormItem::date('date', 'Date')
Формат даты по умолчанию описан в конфигурации в поле dateFormat
. Вы можете переопределить его используя метод format($format)
.
FormItem::date('date', 'Date')->format('d.m.Y')
Time
Создает поле выбора времени.
FormItem::time('time', 'Time')
Формат даты по умолчанию описан в конфигурации в поле timeFormat
. Вы можете переопределить его используя метод format($format)
.
FormItem::time('time', 'Time')->format('H:i')
Отображение секунд
FormItem::time('time', 'Time')->format('H:i:s')->seconds(true)
Timestamp
Создает поле выбора даты и времени.
FormItem::timestamp('timestamp', 'Timestamp')
Формат даты по умолчанию описан в конфигурации в поле datetimeFormat
. Вы можете переопределить его используя метод format($format)
.
FormItem::timestamp('timestamp', 'Timestamp')->format('d.m.Y H:i')
Отображение секунд
FormItem::timestamp('timestamp', 'Timestamp')->format('d.m.Y H:i:s')->seconds(true)
File
Создает поле загрузки файла. Файл будет загружен в директорию imagesUploadDirectory
из конфигурации. Если вам необходимо другое расположение файла - перемещайте его вручную в вашей модели.
FormItem::file('file', 'File')
Image
Создает поле загрузки изображения с предпросмотром. Изображение будет загружено в директорию imagesUploadDirectory
из конфигурации. Если вам необходимо другое расположение файла - перемещайте его вручную в вашей модели.
FormItem::image('photo', 'Photo')
Images
Создает поле загрузки нескольких изображений с предпросмотром. Изображения будут загружены в директорию imagesUploadDirectory
из конфигурации. Если вам необходимо другое расположение файла - перемещайте его вручную в вашей модели.
Ваша модель должна реализовывать field accessors для данного поля и возвращать массив урлов изображений и сохранять массив.
FormItem::images('photos', 'Photos')
Самый простой способ загружать и сохранять изображения - поле типа text
с аксессором:
public function getPhotosAttribute($value)
{
return preg_split('/,/', $value, -1, PREG_SPLIT_NO_EMPTY);
}
public function setPhotosAttribute($photos)
{
$this->attributes['photos'] = implode(',', $photos);
}
Select
Создает поле выбора.
FormItem::select('category_id', 'Category')
Предоставление данных
Массивом:
->options([1 => 'First', 2 => 'Second', 3 => 'Third])
При помощи enum (значения массива используются в качестве ключей):
->enum(['First', 'Second', 'Third])
При помощи модели:
->model('App\MyModel')->display('title')
Обнуляемое поле
Вы можете пометить элемент как обнуляемый:
…->nullable()
Multiselect
Создает поле выбора нескольких записей.
FormItem::multiselect('categories', 'Categories')
Предоставление данных
Массивом:
->options([1 => 'First', 2 => 'Second', 3 => 'Third])
При помощи enum (значения массива используются в качестве ключей):
->enum(['First', 'Second', 'Third])
При помощи модели:
->model('App\MyModel')->display('title')
Сохранение данных
Создайте новый метод мутатора в вашей модели. Пример:
public function setCategoriesAttribute($categories)
{
$this->categories()->detach();
if ( ! $categories) return;
if ( ! $this->exists) $this->save();
$this->categories()->attach($categories);
}
Метод categories()
определяет связь belongs-to-many
в данном случае.
Radio
Создает поле radio.
FormItem::radio('category_id', 'Category')
Предоставление данных
Массивом:
->options([1 => 'First', 2 => 'Second', 3 => 'Third])
При помощи enum (значения массива используются в качестве ключей):
->enum(['First', 'Second', 'Third])
При помощи модели:
->model('App\MyModel')->display('title')
Обнуляемое поле
Вы можете пометить элемент как обнуляемый:
…->nullable()
Textarea
Создает поле textarea.
FormItem::textarea('text', 'Text')
CKEditor
Создает поле ckeditor.
FormItem::ckeditor('text', 'Text')
Custom
Создает произвольный элемент формы. Вы должны указать метод отображения (display()
) и метод сохранения (callback()
).
FormItem::custom()->display(function ($instance)
{
return view('my-form-item', ['instance' => $instance]);
})->callback(function ($instance)
{
$instance->myField = 12;
})
View
Вставляет ваш произвольный view. Вы можете выводить там что вам угодно и вставлять скрипты. В ваш view будет передана переменная $instance
.
FormItem::view('admin.article.view')