asper/cakephp-enum-behavior

此包的最新版本(1.0)没有可用的许可信息。

介绍了一种在 CakePHP 中支持某些 ENUM 类型的替代方法

安装数: 1,905

依赖项: 0

建议者: 0

安全: 0

星标: 10

关注者: 4

分支: 10

开放问题: 1

类型:cakephp-plugin

1.0 2013-12-24 10:19 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:59:30 UTC


README

CakePHP 不支持 MySQL 的 Enum 字段类型。我已提出了大约 3 种解决方案来解决这个问题

  • 使用第二个表
  • 使用 MySQL 的 Enum 并像在 Baked Enums 中那样检索 EnumValues

此行为采用其他方法,它将配置存储在数组中,这既快速又灵活。它还创建了验证规则和选择列表。

安装

只需下载并将其放入 CakePHP-Enum-Behavior 文件夹,并将其内容放入您的 app/Plugin 文件夹中。

app/Config/bootstrap.php 中加载插件

CakePlugin::load('CakePHP-Enum-Behavior');

使用 composer

"require" : {
    "asper/cakephp-enum-behavior": "*"
}

作为 git 子模块(在 app/Plugin 内执行)

git submodule add https://github.com/asper/CakePHP-Enum-Behavior.git

用法

假设我们有一个 posts 表,我们希望有一个 status 字段,该字段可以具有 3 个可能值(draftpublishedarchive)。

表数据

id			int(10)
title		varchar(65)
content		varchar(65)
status		varchar(65)

在您的 Post 模型中

public $actsAs = array(
	'CakePHP-Enum-Behavior.Enum' => array(
		'status' => array('draft', 'published', 'archive')
	)
);

您可以使用具有数据字段值的键的关联数组中的命名键

public $actsAs = array(
    'CakePHP-Enum-Behavior.Enum' => array(
        'status' => array(23 => 'draft', 'pub' => 'published', 2 => 'archive')
    )
);    

在您的 Posts 控制器中,在 beforeRender 回调中添加

$this->set($this->Post->enumValues());

要显示表单中的 status 下拉菜单,只需像往常一样使用 FormHelper

$this->Form->input('Post.status');

要在视图中显示状态,请使用

echo $statuses[$post['Post']['status']];

如果要将字符串转换为翻译,请添加(在任何地方 [即使看起来不合适])

__('Draft'); // Humanized value
__('Published');
__('Archive');

致谢

  • kaiyou : 与 CakePHP 2.3.0 的严格兼容性
  • Andrew Bashtannik : Composer 兼容性
  • Tomasz Mazur : 将插件名称更改为反映 GitHub 项目名称(允许将插件作为 git 子模块使用)

许可

MIT 许可证 (MIT)

版权所有 (c) 2013 Pierre Aboucaya

特此授予任何获得此软件及其相关文档副本(“软件”)的人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许获得软件的人进行此类操作的权利,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵犯性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任(无论源于合同、侵权或其他方式)承担责任,这些索赔、损害或其他责任源于、源于或与软件或其使用或其它交易有关。