我在我的 Cake 应用程序中构建了一个简单的通知系统,我希望有一个函数可以在我调用某个方法时创建一个新通知。因为这不是用户实际直接访问的东西,而只是数据库逻辑,所以我将它放在 Notification 模型中,如下所示:
class Notification extends AppModel
{
public $name = 'Notification';
public function createNotification($userId, $content, $url)
{
$this->create();
$this->request->data['Notification']['user_id'] = $userId;
$this->request->data['Notification']['content'] = $content;
$this->request->data['Notification']['url'] = $url;
$result = $this->save($this->request->data);
if ($result)
{
$this->saveField('datetime', date('Y-m-d H:i:s'));
$this->saveField('status', 0);
}
}
}
然后每当我想在我的应用程序中创建通知时,我都会这样做:
$this->Notification->createNotification($userId,'Test','Test');
然而这不起作用!控制器与模型对话正常,但它没有在数据库中创建行......我不知道为什么......但似乎我做错了只是通过执行所有代码模型,然后在整个应用程序中调用它。
编辑:根据下面的答案和评论,我尝试了以下代码在我的通知控制器中创建受保护的方法:
protected function _createNotification($userId, $content, $url)
{
$this->Notification->create();
$this->request->data['Notification']['user_id'] = $userId;
$this->request->data['Notification']['content'] = $content;
$this->request->data['Notification']['url'] = $url;
$result = $this->save($this->request->data);
if ($result)
{
$this->saveField('datetime', date('Y-m-d H:i:s'));
$this->saveField('status', 0);
}
}
现在仍然困扰着我的事情(抱歉,如果这对其他人来说很简单,但我之前没有在 CakePHP 中使用过受保护的方法)是我如何从另一个控制器调用它?因此,例如,如果在我的 PostsController 中有一个方法,并且想在成功保存时创建一个通知,我该怎么做?
我在我的 PostsController add 方法中想过:
if($this->save($this->request-data){
$this->Notification->_createNotification($userId,'Test','Test');
}
但是受到保护,我将无法从 NotificationsController 外部访问该方法。此外,我使用的语法与从模型中调用函数的语法相同,所以再次感觉不对。
希望有人可以帮助我,让我重回正轨,因为这对我来说是一个新领域。