asper / cakephp-enum-behavior
介绍了一种在 CakePHP 中支持某些 ENUM 类型的替代方法
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 个可能值(draft
、published
、archive
)。
表数据
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
特此授予任何获得此软件及其相关文档副本(“软件”)的人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许获得软件的人进行此类操作的权利,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵犯性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任(无论源于合同、侵权或其他方式)承担责任,这些索赔、损害或其他责任源于、源于或与软件或其使用或其它交易有关。