Произвольные элементы формы
Вы можете регистрировать собственные элементы формы в файле bootstrap.php
в директории bootstrapDirectory
(по умолчанию app/admin/bootstrap.php
).
FormItem::register('{type}', \Foo\Bar\MyColumn::class)
Ваш класс должен реализовывать интерфейс SleepingOwl\Admin\Models\Form\Interfaces\FormItemInterface
.
FormItem::register('{type}', function ($instance)
{
// implement your form element code here
if ($instance->exists)
{
// editing form
} else
{
// creating form
}
return 'my element';
})
Добавление скриптов и стилей
Вы можете добавить свои скрипты и стили на страницу, которая использует ваш элемент формы.
FormItem::register('my', function ($instance)
{
AssetManager::addScript(URL::asset('js/my.js'));
AssetManager::addScript('//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js');
AssetManager::addStyle(URL::asset('css/my.css'));
return 'anything';
})
Пример используя замыкание
bootstrap.php
FormItem::register('myItem', function ($instance)
{
if ($instance->exists)
{
return 'You are editing existing entity.';
} else
{
return 'You are creating new entity.';
}
})
Использование в конфигурации модели
->form(function ()
{
FormItem::myItem();
})
Вы не можете предоставить дополнительных данных вашему элементу используя замыкание. Если вам нужно более гибкое решение - используйте классы.
Пример используя класс
bootstrap.php
FormItem::register('myItem', \Acme\MyItem::class)
Acme/MyItem.php
use SleepingOwl\Admin\Models\Form\Interfaces\FormItemInterface;
class MyItem implements FormItemInterface
{
protected $label;
public function render()
{
$instance = Admin::instance()->formBuilder->getModel();
if ($instance->exists)
{
return "You are editing existing {$this->label}.";
} else
{
return "You are creating new {$this->label}.";
}
}
public function setLabel($label)
{
$this->label = $label;
return $this;
}
}
Использование в конфигурации модели
->form(function ()
{
FormItem::myItem()->setLabel('category');
})