CakePHP comportement après-fin non appelé sur des modèles connexes
-
26-09-2019 - |
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;
}
}
La solution
Je suppose que je ferais l'une des 2 choses en fonction de l'application générique du bloc de code:
- Version universelle: n'utilisez pas un comportement, mais incluez votre bloc de méthode dans
AppModel::afterFind
- 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.