cakephp行为afterFind没有调用相关模型

时间:2010-10-26 22:05:57

标签: cakephp callback cakephp-1.3 behavior

我正在使用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;
    }
}

3 个答案:

答案 0 :(得分:2)

我想我会做两件事之一,具体取决于代码块的适用范围:

  1. 通用版:不使用行为,但在AppModel::afterFind
  2. 中包含您的方法块
  3. 手术版:使用行为并将其附加到需要共享功能的每个模型。

答案 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

设置执行格式化的事件 - 然后根据需要触发该事件。像蛋糕一样容易。