Pergunta

Estou usando uma função pós -encontro para modificar os dados de uma função de localização. Funciona bem. Se eu mover a função Afterfind para um comportamento (em um plug -in), ele ainda funciona, mas somente quando o modelo de interesse é o modelo principal, ou seja, ele não é chamado quando o modelo pertence a outro modelo. Existe alguma maneira de voltar a isso? Estou usando o bolo 1.3.4. Esta é uma versão simplificada do comportamento:

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

Solução

Acho que faria uma das duas coisas, dependendo de quão geneicamente o bloco de código se aplica:

  1. Versão universal: não use um comportamento, mas inclua seu bloco de método em AppModel::afterFind
  2. Versão cirúrgica: use um comportamento e anexe -o a cada modelo que precisa compartilhar a funcionalidade.

Outras dicas

Um comportamento não deve funcionar em modelos relacionados, por exemplo, se você tiver esses dois modelos:

App/modelos/product.php

<?php

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

?>

app/modelos/category.php

<?php 

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

?>

Algum Behavior só será executado ao chamar métodos de produto, porque o comportamento não está associado à categoria

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

Configure um evento que faça a formatação - acione esse evento como precisar. Fácil como bolo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top