我正在使用后发现函数来修改查找函数的数据。它可以正常工作。如果我将后发现函数移动到行为(在插件中)仍然有效,但是只有当感兴趣的模型是主要模型时,即当模型属于另一个模型时,它不会调用。有什么办法吗?我正在使用蛋糕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;
    }
}
有帮助吗?

解决方案

我想我会根据代码块的使用方式来做两件事之一:

  1. 通用版本:不使用行为,而是在 AppModel::afterFind
  2. 手术版本:使用行为并将其附加到需要共享功能的每个模型上。

其他提示

例如,如果您有两个模型,则不应该在相关模型上使用:

应用程序/型号/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

设置一个执行格式化的事件 - 触发该事件的情况。像蛋糕一样容易。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top