Cakeアプリに簡単な通知システムを構築しました。特定のメソッドを呼び出すと、新しい通知を作成する関数が必要です。これはユーザーが実際に直接アクセスするものではなく、データベースロジックにすぎないため、次のように通知モデルに配置しました。
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の外部からメソッドにアクセスすることはできません。また、モデルから関数を呼び出す場合と同じ構文を使用しているため、これも正しくありません。
これは私にとって新しい分野なので、誰かが私を助けて、私を軌道に戻すことができれば幸いです。