phact-cmf-modules / admin
phact CMF 的管理模块
v4.1.0
2022-07-17 17:37 UTC
Requires
- php: ^7.1.3 | ^8.0
- phact-cmf/phact: ^4.0.0
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 - 在父级内定义子 "管理器"