yos*_*ssi 6 cakephp model behavior
我理解这种行为应该扩展模型并为其添加功能,但在大多数情况下,胖模型的想法使行为无用,不是吗?
并且,甚至首选,忽略我的第一段,只是回答 - 请 - 标题中的问题,并添加一个示例,以明确
谢谢
Bra*_*ell 23
行为是您提取不属于某个特定模型域的代码的地方.有点像,辅助函数,或mixin /模块(如果你熟悉其他编程语言的模式).
如果您熟悉CakePHP帮助程序和组件,可以像这样查看它.行为是模型作为助手是视图,因为组件是控制器.基本上是一组将在多个模型中使用的功能.
假设您要在应用程序中的所有模型上实现软删除.(软删除意思,你实际上不删除记录,你只需将其标记为已删除).您不希望将相同的软删除代码放入每个模型中.那不是很干!相反,您使用行为来抽象出这样的功能.
我们要做的不是删除记录,而是使用当前日期更新已删除的列(它将以与创建,修改相同的方式工作).然后我们将find方法更改为仅检索未删除的记录.
// models/behaviors/soft_deletable.php
class SoftDeletableBehavior extends ModelBehavior {
function setup(&$Model, $settings = array()) {
// do any setup here
}
// override the delete function (behavior methods that override model methods take precedence)
function delete(&$Model, $id = null) {
$Model->id = $id;
// save the deleted field with current date-time
if ($Model->saveField('deleted', date('Y-m-d H:i:s'))) {
return true;
}
return false;
}
function beforeFind(&$Model, $query) {
// only include records that have null deleted columns
$query['conditions']["{$Model->alias}.deleted <>"] = '';
return $query;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的模型中
Class User extends AppModel {
public $actsAs = array('SoftDeletable');
}
Run Code Online (Sandbox Code Playgroud)
从控制器中,您可以在模型上调用我们的所有行为方法
Class UsersControllers extends AppController {
function someFunction() {
$this->User->delete(1); // soft deletes user with id of 1
$this->User->find('all'); // this will not exclude user with an id of 1
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助你.
| 归档时间: |
|
| 查看次数: |
6285 次 |
| 最近记录: |