我正在使用afterFind函数来修改find函数中的数据。它工作正常。如果我将afterFind函数移动到一个行为(在插件中)它仍然有效,但仅当感兴趣的模型是主要模型时,即当模型属于另一个模型时不调用它。这有什么办法吗?我正在使用蛋糕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;
}
}
答案 0 :(得分:2)
我想我会做两件事之一,具体取决于代码块的适用范围:
AppModel::afterFind
答案 1 :(得分:2)
行为不应该适用于相关模型,例如,如果您有这两个模型:
应用/模型/ product.php 强>
<?php
class Product extends AppModel{
var $belongsTo = array('Category');
var $actsAs = array('SomeBehavior');
}
?>
应用/模型/ category.php 强>
<?php
class Category extends AppModel {
var $hasMany = array('Product');
}
?>
只有在调用Product的方法时才会执行SomeBehavior ,因为该行为与Category
无关答案 2 :(得分:2)
http://github.com/m3nt0r/eventful-cakephp
设置执行格式化的事件 - 然后根据需要触发该事件。像蛋糕一样容易。