Вы можете регистрировать собственные элементы формы в файле 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');
})