davidyell/statusable

此包已被废弃,不再维护。作者建议使用muffin/trash包代替。

允许模型记录具有各种状态的行为

安装: 45

依赖: 0

建议者: 0

安全: 0

星标: 5

关注者: 1

分支: 1

开放问题: 0

类型:cakephp-plugin

v0.2.1 2014-10-07 09:50 UTC

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_iddeleted_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'
    );

在视图中加载状态

如果您想在 addedit 动作中添加 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 的小伙子们表示敬意。