CakePHP:如何访问$this->;模型内的请求
我使用的是CakePHP v2.4 在模型的CakePHP:如何访问$this->;模型内的请求,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,我使用的是CakePHP v2.4 在模型的afterSave()回调中,我希望根据请求的条件有条件地执行某些操作。但是,$this->request似乎未在此处定义: public function afterSave( $created, $options=array() ) { $this->log( $this->request ); //NOTHING HERE } 如何执行此操作?您可以通过全局路由器类访问它 public function afterSave(
afterSave()
回调中,我希望根据请求的条件有条件地执行某些操作。但是,$this->request
似乎未在此处定义:
public function afterSave( $created, $options=array() ) {
$this->log( $this->request ); //NOTHING HERE
}
如何执行此操作?您可以通过全局路由器类访问它
public function afterSave( $created, $options=array() ) {
$this->log( Router::getRequest() );
}
与在afterSave()方法中调用一个单音(Router::getRequest())并引入Mathew建议的紧密耦合不同,为什么不能传递所需的任何参数以及试图保存的记录的数据
它将出现在afterSave()中的$this->data中。另外,这种方法很容易测试。在这个方法中测试Router::getRequest()很有趣
如果您需要整个请求,您可以在那里添加一个属性模型::$request到AppModel和一个方法setRequest(),在控制器beforeFilter()中,您可以执行$this->{$this->modelClass}->setRequest($this->request) +1个好建议。看起来他想记录点什么。我建议将日志代码从模型移到Lib文件夹,然后在创建logger对象时传入请求数据,然后将该logger附加到您的模型。模型不应该关心日志记录器是否需要知道当前请求。“在这个方法中测试Router::getRequest()很有趣。”我试着测试它很有趣。使用
$this->Model->request=new CakeRequest()在测试中获取请求->数据集要容易得多$此->模型->请求->数据=$this->测试数据你把我的袜子都摇下来了!仍然在蛋糕3中工作;发现这是帮助我将一些事件侦听器移出控制器并移到更中心位置的答案。由于所涉及的抽象层次,提前找到相关的查询字符串信息并将其全部传递不是一个好的解决方案;控制器无法知道可能触发的事件或事件侦听器需要知道的内容。如何从数据部分获取请求参数并链接到文档