davidyell/ statusable
Requires
- composer/installers: ~1.0
This package is not auto-updated.
Last update: 2022-02-01 12:27:32 UTC
README
CakePHP插件,可简化在Web应用程序中管理项目状态的过程。我总是在模型中添加一个Status
模型和status_id
字段,以便可以将它们标记为活动或非活动。
生命终止
此插件现已达到生命终止阶段,不会再进行更新。如果您正在寻找具有类似功能的CakePHP 3插件,请参阅UseMuffin/Trash插件。
它做什么?
当附加到模型时,该行为会自动处理查找的过滤,以便具有特定状态的项不会显示给用户。它还可以通过仅将记录的状态更改为“已删除”而不是删除它来实现软删除。
还有一个方法允许您从行为中拉取状态列表,以便在管理界面中显示给用户,让他们更改记录的状态。
假设
此插件对您的应用程序只有一个简单的假设。
您有一个管理区域来管理内容,可能使用admin
前缀
这个假设是因为您可能希望向前端用户显示一些项目,向管理员用户显示不同的项目。切换将基于路由前缀进行。
配置
您需要在app/Config/bootstrap.php
中使用CakePlugin::load('Statusable')
来加载此插件。您可以使用CakePlugin::loadAll()
,但这会减慢速度。
数据库
您还需要一个表来存储您的状态。您可以使用以下内容创建默认表。
$ Console/cake schema create -p Statusable
一旦创建了表,您需要使用以下内容填充它,以便行为可以使用它。一个例子可能如下所示,
INSERT INTO `statuses` (name, created, modified) VALUES ('Live', NOW(), NOW()), ('Inactive', NOW(), NOW()), ('Protected live', NOW(), NOW()), ('Protected inactive', NOW(), NOW()), ('Archived', NOW(), NOW()), ('Deleted', NOW(), NOW())
您需要在数据库表中为每个附加行为的模型创建status_id
和deleted_date
字段。如果您想命名不同,可以这样做,但您必须记住在将行为附加到模型时配置它们。
别忘了将status_id
字段的默认值设置为您的默认状态。例如,将inactive
的默认值设置为2
。
此外,deleted_date
字段需要是DATETIME
字段。
将行为附加到您的模型
// Model/Example.php public $actsAs = array( 'Statusable.Statusable' // If you want to configure the behaviour you can pass options in here );
如果您的配置与默认配置不同,则可以在此处传递给行为配置选项。您可以在行为的源代码中的$defaults
中找到默认选项。
将组件添加到控制器
在您的控制器中,您需要添加组件。我希望将来能去掉这个组件,但暂时来说,它是访问路由所必需的。
// Controller/ExampleController.php public $components = array( 'Statusable.Statusable' );
在视图中加载状态
如果您想在 add
和 edit
动作中添加 status_id
字段,该行为提供了一个方便的方法来返回状态列表。
// Controller/ExampleController.php $statuses = $this->Example->getStatuses(); // View/Example/edit.ctp echo $this->Form->input('status_id');
建议的功能
- 对
statuses
表结构的迁移 -
Status
模型 - 使用模型回调来更改状态的行为
- 修改查找操作以添加额外条件的行为
- 从 CakeDC/Utils/SoftDelete 行为中借用一些关于删除的功能
- 一些可以加快记录管理速度的功能,例如向表单中注入
status_id
字段组件。但这可能过于宽泛且用途单一,对每个人可能都不太有帮助。 - 不确定状态应该放在数据库中还是行为中。如果它们在数据库中,如何知道哪些是可显示的以及在哪里?行为中的允许配置
荣誉提及
我也经常使用 CakeDC/Utils/SoftDelete 行为,所以这从中得到了灵感。所以向 CakeDC 的小伙子们表示敬意。