CakePHP:如何访问$this->;模型内的请求

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(

我使用的是CakePHP v2.4

在模型的
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->测试数据数据
部分获取请求参数并链接到文档