CakePHP 为每个请求添加公共代码
CakePHP add common code for each request
我正在使用 cakephp 2.6,我有一个场景,每当当前登录用户点击网站的任何 url 时,我都必须更新数据库 table 列 "last_request"。
我是 cakePHP 的新手,请建议我在哪里可以实现通用代码(例如:组件等),以便可以管理所有请求,而无需从每个函数或控制器中专门调用该代码。
谢谢。
您可以在与您的 table
关联的 Model
中完成
我这里假设 table 名字是 users
<?php
class User extends AppModel{
public function updateLastHit($id, $value){
$lastID = $this->id;
$this->id = $id;
$result = $this->saveField('last_hit', $value);
$this->id = $lastID;
return $result;
}
}
然后在控制器动作逻辑完成时调用此函数,afterFilter
是合适的方法
例如来自AppController
public function afterFilter(){ // afterRender
//Set the variable $value
$userModel = ClassRegistry::init('User');
$userModel->updateLastHit($this->Auth->user('id'), $value);
}
您需要向 AppController 添加一个 afterFilter()
方法。 (details here)
afterFilter: Called after every controller action, and after rendering is complete. This is the last controller method to run.
如果您希望代码更早更新或使用其他方法之一,您可以选择使用 beforeFilter() Request-Lifcycle callbacks。
然后,您可以在用户模型中添加一个方法来执行您想要的操作(使用 last_request
字段更新用户的行)。
在 afterFilter() 方法中,确保加载了 User 模型,然后调用它的方法。每次请求后,afterFilter 将被触发,您的模型代码将是 运行.
@Dave 建议的答案,可能是@Ayaou 给出的最佳解决方案和答案,除了代码重复的可能性外,效果很好。
我想分享的是这些东西都可以通过Authorization在
AppController 也是。
public function isAuthorized($user)
{
$userTable = ClassRegistry::init('User');
$data = ['last_request' => $last_request_data];
$userTable->id = $user['id'];
$userTable->save($data);
}
同样的事情也可以用 afterFilter 完成。
我正在使用 cakephp 2.6,我有一个场景,每当当前登录用户点击网站的任何 url 时,我都必须更新数据库 table 列 "last_request"。 我是 cakePHP 的新手,请建议我在哪里可以实现通用代码(例如:组件等),以便可以管理所有请求,而无需从每个函数或控制器中专门调用该代码。 谢谢。
您可以在与您的 table
关联的Model
中完成
我这里假设 table 名字是 users
<?php
class User extends AppModel{
public function updateLastHit($id, $value){
$lastID = $this->id;
$this->id = $id;
$result = $this->saveField('last_hit', $value);
$this->id = $lastID;
return $result;
}
}
然后在控制器动作逻辑完成时调用此函数,afterFilter
是合适的方法
例如来自AppController
public function afterFilter(){ // afterRender
//Set the variable $value
$userModel = ClassRegistry::init('User');
$userModel->updateLastHit($this->Auth->user('id'), $value);
}
您需要向 AppController 添加一个 afterFilter()
方法。 (details here)
afterFilter: Called after every controller action, and after rendering is complete. This is the last controller method to run.
如果您希望代码更早更新或使用其他方法之一,您可以选择使用 beforeFilter() Request-Lifcycle callbacks。
然后,您可以在用户模型中添加一个方法来执行您想要的操作(使用 last_request
字段更新用户的行)。
在 afterFilter() 方法中,确保加载了 User 模型,然后调用它的方法。每次请求后,afterFilter 将被触发,您的模型代码将是 运行.
@Dave 建议的答案,可能是@Ayaou 给出的最佳解决方案和答案,除了代码重复的可能性外,效果很好。
我想分享的是这些东西都可以通过Authorization在 AppController 也是。
public function isAuthorized($user)
{
$userTable = ClassRegistry::init('User');
$data = ['last_request' => $last_request_data];
$userTable->id = $user['id'];
$userTable->save($data);
}
同样的事情也可以用 afterFilter 完成。