質問

FIND関数からデータを変更するために、FIND関数を変更しています。正常に動作します。 andfind関数を(プラグイン内で)動作に移動すると、それはまだ機能しますが、目的のモデルが主要なモデルである場合にのみ、モデルが別のモデルに属するときに呼び出されません。これを回る方法はありますか?ケーキ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;
    }
}
役に立ちましたか?

解決

コードブロックがどのように適用されるかに応じて、2つのことのいずれかを実行すると思います。

  1. ユニバーサルバージョン:動作を使用せず、メソッドブロックをに含めます AppModel::afterFind
  2. 外科バージョン:行動を使用して、機能を共有する必要がある各モデルにそれを添付します。

他のヒント

たとえば、この2つのモデルがある場合、動作は関連モデルで動作するはずではありません。

app/models/product.php

<?php

class Product extends AppModel{
    var $belongsTo = array('Category');
    var $actsAs = array('SomeBehavior');
}

?>

app/models/category.php

<?php 

class Category extends AppModel {
    var $hasMany = array('Product');
}

?>

Somehavior 動作がカテゴリに関連付けられていないため、製品のメソッドを呼び出すときにのみ実行されます

http://github.com/m3nt0r/eventful-cakephp

フォーマットを行うイベントを設定します - 必要なイベントをトリガーします。ケーキのように簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top