phact CMF 的管理模块

v4.1.0 2022-07-17 17:37 UTC

This package is auto-updated.

Last update: 2024-09-17 22:21:44 UTC


README

模型在管理面板中的标准输出

假设我们输出管理面板中的 Book 模型

模型示例

class Book extends Model
{
    public static function getFields()
    {
        return [
            'name' => [
                'class' => CharField::class,
                'label' => 'Наименование'
            ],
        ];
    }
}

在您的模块中添加一个名为 Admin 的文件夹,创建一个名为 BookAdmin.php 的文件

文件命名没有限制,例如也可以命名为 BookMyAdmin.php

class BookAdmin extends Admin
{
    public function getSearchColumns()
    {
        return ['name'];
    }

    public function getModel()
    {
        return new Book();
    }

    public static function getName()
    {
        return 'Книги';
    }

    public static function getItemName()
    {
        return 'Книга';
    }
}

属性和方法

getSearchColumns - 用于搜索模型的属性列表数组

getModel - 与此 "管理器" 一起工作的模型

getName - "管理器" 的命名(菜单中的项,面包屑导航)

getItemName - 单个 "管理器" 元素的命名

连接自定义表单

为编辑和创建模型安装自己的表单

表单必须与 Book 模型一起工作,并继承自 ModelForm

class BookAdmin extends Admin
{
...
    public function getForm()
    {
        return new BookAdminForm();
    }
...
}

如果我们需要为编辑和创建模型指定单独的表单,可以这样指定

class BookAdmin extends Admin
{
...
    public function getForm()
    {
        return new BookAdminCreateForm();
    }

    public function getUpdateForm()
    {
        return new BookAdminUpdateForm();
    }
...
}

属性和方法

getForm - 指定创建和编辑模型的表单

getUpdateForm - 指定用于编辑模型的单独表单

相关管理面板(RelatedAdmin)

相关管理面板有助于方便地创建和编辑通过 ForeignKey 关联到当前模型的模型。例如,在我们的案例中是书籍的发行版(《Release》)

《Release》模型示例

class Release extends Model
{
    public static function getFields()
    {
        return [
            'book' => [
                'class' => ForeignField::class,
                'modelClass' => Book::class,
                'label' => 'Книга'
            ],
            'year' => [
                'class' => CharField::class,
                'label' => 'Год'
            ],
            'position' => [
                'class' => PositionField::class,
                'editable' => false,
                'default' => 0,
                'relations' => [
                    'book'
                ]
            ]
        ];
    }

    public function __toString()
    {
        return (string) $this->year;
    }
}

为其创建以下 "管理器" ReleaseAdmin

class ReleaseAdmin extends Admin
{
    public static $ownerAttribute = 'book';

    public function getSearchColumns()
    {
        return ['year'];
    }

    public function getModel()
    {
        return new Release();
    }

    public static function getName()
    {
        return 'Издания';
    }

    public static function getItemName()
    {
        return 'Издание';
    }
}

可以看到,它与标准 "管理器" 的区别仅在于 $ownerAttribute 属性,它指定了模型中的连接,通过该连接此 "管理器" 将连接到其他模型。

修改 BookAdmin

class BookAdmin extends Admin
{
...
    public function getRelatedAdmins()
    {
        return [
            'releases' => ReleaseAdmin::class
        ];
    }
...
}

现在 ReleaseAdmin 将在 BookAdmin 内显示

属性和方法

static $ownerAttribute - 指定用于连接子 "管理器" 的关系,通过该关系此 "管理器" 将连接到父级

getRelatedAdmins - 在父级内定义子 "管理器"