jmcneese / bitmasked
Bitmasked 是一个 CakePHP 的插件,用于通过位掩码进行模型行级过滤。
Requires
This package is not auto-updated.
Last update: 2020-08-21 19:59:34 UTC
README
通过位掩码进行模型行级过滤。
要求
- PHP5.2+ (5.3+ 具有完整功能)
- CakePHP 2.0+
安装
手册
- 下载此文件:http://github.com/jmcneese/bitmasked/zipball/master
- 解压下载文件。
- 将生成的文件夹复制到 app/plugins
- 将复制的文件夹重命名为
bitmasked
GIT 子模块
从您的仓库根目录输入
git submodule add git://github.com/jmcneese/bitmasked.git app/Plugin/Bitmasked
git submodule update --init
GIT 克隆
在您的插件目录中输入
git clone git://github.com/jmcneese/bitmasked.git Bitmasked
用法
- 将 config/schema/bitmasked_bits.sql 中的 SQL 导入您的应用程序数据库
- 通过以下方式在任何模型中激活行为:
public $actsAs = array( 'Bitmasked.Bitmasked' );
选项
可以将多个可配置选项传递给行为
- disabled — 如果您希望行为以禁用状态启动,即不自动基于位掩码过滤行,则将此设置为 true。默认:false
- default — 这是为此模型保存的新记录的默认位,除非在保存数据中指定了其他内容。默认:1
- bits — 一个映射到位的标志(字符串)数组,用于特定模型。默认:array(‘ALL’ => 1)
- mask — 用于在模型上查找记录时使用的位掩码。这里有几种可能的设置
- 隐式(整数)。这是当位掩码在所有查找中都是静态的时候。
- 标志(字符串)。这是您在“bits”选项中定义的标志的字符串表示。
- 标志(数组)。字符串形式的标志数组。
- 回调(混合)。一个引用全局作用域中的函数名称的字符串,一个附加模型中的方法或匿名函数(仅 PHP5.3)。
示例
假设我们经营一家杂货店,并希望轻松查询用户可以查看的所有项目。在这个例子中,我们将使用有年龄限制的项目。
首先,让我们将组分成常见的限制。通过调整模型的行为中的位掩码设置,我们可以轻松地完成这项工作。
public $actsAs = array(
'Bitmasked.Bitmasked' => array(
'bits' => array(
'ALL' => 1,
'18+' => 2,
'21+' => 4,
'55+' => 8
)
)
);
我们已经为每个组分配了一个易于记忆的名称,我们可以在稍后的查询中引用它。完成这项工作后,我们可以继续创建项目。
// Item for everyone.
$this->Item->create();
$this->Item->save(array(
'name' => 'Ice Cream',
'bits' => array(
'ALL',
'18+',
'21+',
'55+'
)
));
// Item for 18+ year olds
$this->Item->create();
$this->Item->save(array(
'name' => 'Cigarettes',
'bits' => array(
'18+',
'21+',
'55+'
)
));
// Item for 21+ year olds
$this->Item->create();
$this->Item->save(array(
'name' => 'Alcohol',
'bits' => array(
'21+',
'55+'
)
));
// Item for 55+ year olds
$this->Item->create();
$this->Item->save(array(
'name' => 'Lawn',
'bits' => array(
'55+'
)
));
请注意,对于项目,我们保存了最低匹配的组以及所有上面的组。你28岁并不意味着你不想要冰淇淋,对吧?
创建这些行后,我们可以轻松地获取到应该显示的行。以下是一个查找18岁可以看到的所有内容的示例。
$items = $this->Item->find(
'all',
array(
'conditions' => array(),
'bitmask' => array(
'18+'
)
)
);
在我们的$items
数组中,应该有“冰淇淋”和“香烟”记录可用。注意我们是如何使用组名(18+
)而不是实际的掩码值。
您不必保存所有可用组的物品,而是可以保存最低组,并查询此人允许的所有组;相同的示例看起来是这样的
// Item for everyone. Note we only save "ALL"
$this->Item->create();
$this->Item->save(array(
'name' => 'Ice Cream',
'bits' => array(
'ALL'
)
));
// Query for an 18yr old. Notice how we include "ALL"
$items = $this->Item->find(
'all',
array(
'conditions' => array(),
'bitmask' => array(
'ALL',
'18+'
)
)
);
待办事项
- 添加行为方法以重新配置,例如更改配置选项。
许可
版权所有 © 2009-2012 Joshua M. McNeese,Curtis J. Beeson
特此授予任何获得本软件及其相关文档文件(“软件”)副本的人免费使用许可
本软件,不受任何限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许软件的受让人进行此类操作,前提是遵守以下条件
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是包括但不限于适销性、针对特定目的的适用性和非侵权性保证。
在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他原因,无论这些责任是否由本软件或其使用或其他交易引起。
OUT
OF
CONNECTION
WITH
THE
SOFTWARE
OR
THE
USE
OR