Question

J'utilise une fonction AfterFind pour modifier les données d'une fonction de recherche. Ça fonctionne bien. Si je déplace la fonction AfterFind dans un comportement (dans un plugin), cela fonctionne toujours, mais uniquement lorsque le modèle d'intérêt est le modèle principal, c'est-à-dire qu'il n'est pas appelé lorsque le modèle appartient à un autre modèle. Y a-t-il un moyen de faire cela? J'utilise le gâteau 1.3.4. Ceci est une version simplifiée du comportement:

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;
    }
}
Était-ce utile?

La solution

Je suppose que je ferais l'une des 2 choses en fonction de l'application générique du bloc de code:

  1. Version universelle: n'utilisez pas un comportement, mais incluez votre bloc de méthode dans AppModel::afterFind
  2. Version chirurgicale: utilisez un comportement et attachez-le à chaque modèle qui doit partager les fonctionnalités.

Autres conseils

Un comportement n'est pas censé fonctionner sur des modèles connexes, par exemple, si vous avez ces deux modèles:

app / modèles / produit.php

<?php

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

?>

app / modèles / catégorie.php

<?php 

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

?>

Certains bavines ne sera exécuté que lors de l'appel des méthodes de produit, car le comportement n'est pas associé à la catégorie

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

Configurez un événement qui fait le formatage - déclenchez cet événement comme vous en avez besoin. Facile comme un gâteau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top