cakephp行为后,未调用相关模型
-
26-09-2019 - |
题
我正在使用后发现函数来修改查找函数的数据。它可以正常工作。如果我将后发现函数移动到行为(在插件中)仍然有效,但是只有当感兴趣的模型是主要模型时,即当模型属于另一个模型时,它不会调用。有什么办法吗?我正在使用蛋糕1.3.4。这是行为的简化版本:
class ChemicalStructureBehavior extends ModelBehavior {
function afterFind(&$model, $results, $primary) {
foreach ($results as &$unit) {
// format chemical formula (with subscripts)
$unit[$model->alias]['chemical_formula_formatted'] = preg_replace('/([0-9]+)/i', '<sub>$1</sub>', $unit[$model->alias]['chemical_formula']);
}
return $results;
}
}
解决方案
我想我会根据代码块的使用方式来做两件事之一:
- 通用版本:不使用行为,而是在
AppModel::afterFind
- 手术版本:使用行为并将其附加到需要共享功能的每个模型上。
其他提示
例如,如果您有两个模型,则不应该在相关模型上使用:
应用程序/型号/product.php
<?php
class Product extends AppModel{
var $belongsTo = array('Category');
var $actsAs = array('SomeBehavior');
}
?>
app/models/catpory.php
<?php
class Category extends AppModel {
var $hasMany = array('Product');
}
?>
某个行为 仅在调用产品方法时执行,因为该行为与类别不关联
http://github.com/m3nt0r/eventful-cakephp
设置一个执行格式化的事件 - 触发该事件的情况。像蛋糕一样容易。
不隶属于 StackOverflow