Pregunta

Estoy usando una función posterior para modificar los datos de una función de búsqueda. Funciona bien. Si muevo la función posterior a la intemperie a un comportamiento (en un complemento) todavía funciona, pero solo cuando el modelo de interés es el modelo primario, es decir, no se llama cuando el modelo pertenece otro modelo. ¿Hay alguna forma en torno a esto? Estoy usando pastel 1.3.4. Esta es una versión simplificada del comportamiento:

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;
    }
}
¿Fue útil?

Solución

Supongo que haría una de las 2 cosas dependiendo de cuán genéricamente se aplique el bloque de código:

  1. Versión universal: no use un comportamiento, pero incluya su bloque de métodos en AppModel::afterFind
  2. Versión quirúrgica: use un comportamiento y adjunte a cada modelo que necesite compartir la funcionalidad.

Otros consejos

No se supone que un comportamiento funcione en modelos relacionados, por ejemplo, si tiene estos dos modelos:

aplicación/modelos/producto.php

<?php

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

?>

aplicación/modelos/categoría.php

<?php 

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

?>

Algún comportamiento Solo se ejecutará al llamar a los métodos para el producto, porque el comportamiento no está asociado con la categoría

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

Configure un evento que realice el formato: active ese evento como sea necesario. Fácil como el pastel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top