gpt4 book ai didi

cakephp - 模型和行为之间有什么区别?

转载 作者:行者123 更新时间:2023-12-02 15:34:22 26 4
gpt4 key购买 nike

我知道该行为应该扩展模型并为其添加功能,但在大多数情况下,胖模型的想法使该行为毫无用处,不是吗?

而且,甚至更愿意,忽略我的第一段,只回答 - 请 - 标题中的问题,并添加一个示例以使其清楚

谢谢

最佳答案

行为是指提取并不真正属于某个特定模型域的代码。有点像辅助函数或 mixin/模块(如果您熟悉其他编程语言的模式)。

如果您熟悉 CakePHP 帮助程序和组件,您可以这样看。行为之于模型就像助手之于 View 一样,组件之于 Controller 。基本上是一组将在多个模型中使用的功能。

假设您想要对应用程序中的所有模型实现软删除。 (软删除的意思是,您实际上并没有删除记录,只是将其标记为已删除)。您不想将相同的软删除代码放入每个模型中。那不是很干!相反,您使用一种行为来抽象出功能,如下所示。

我们想要做的不是删除记录,而是使用当前日期更新已删除的列(其工作方式与创建、修改的方式相同)。然后我们将更改 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;
}
}

然后在你的模型中

Class User extends AppModel {
public $actsAs = array('SoftDeletable');
}

并且从您的 Controller 中,您可以在您的模型上调用我们的所有行为方法

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
}
}

希望这对您有帮助。

关于cakephp - 模型和行为之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7249342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com