cakephp如何使用回调方法

时间:2011-06-03 21:48:18

标签: cakephp cakephp-1.3

我是cakephp的新手。我在模型中获取结果部分并在回调中使用它时尝试进行查询。但是当我尝试从模型中调试$ newArray时出现错误..在我的控制器中我有这个

function index($var = null){


             if (empty($this->data)) {




             } 
             else { 


                            $results = array();

                            $getRecords = $this->Model->find('all');
                                $results = $this->Model->afterFind($getRecords);
                                debug($this->newArray);

            }
    }

在我的模型中,我有这个

class Model extends AppModel {
function afterFind($getRecords){
    $newArray = array();    
    $query_string = $getRecords['Record']['column1']" ;
    $results = $this->Model->query($query_string);
        foreach($results as $result){


        //do something and add to $newArray

        }
        return $newArray;

    }
}

1 个答案:

答案 0 :(得分:2)

回调是由Cake自动调用的,你不要手动调用它们(这就是重点,否则它们是正常的方法)。流程是:

  • 控制器调用Model::find
  • Cake触发Model::beforeFind回调(如果存在)
  • Cake找到结果
  • Cake触发Model::afterFind回调(如果存在),传入已找到数据的数组
    • 回调应该返回数据
  • Controller接收Model::afterFind
  • 返回的数据

afterFind in the manual有一些例子。您不应该从afterFind触发进一步的查询,因为这可能会进入无限循环,每个查询都会触发更多afterFind个回调。我也不建议在afterFind中过于剧烈地改变你的结果,你应该只在必要时轻轻按摩结果。我无法从你的帖子中看出你想要实现的是什么,所以我不能给出任何具体的提示,但你可以在没有afterFind的情况下通过在控制器中制定更好的查询来实现。< / p>