访问模型中的 Auth 组件
Access Auth component in Model
我想创建一个行为,以便在使用登录用户的 ID 保存记录时自动填充 'created_by' 字段,就像时间戳对 'created' 所做的那样。但是,显然您可以在模型中的任何地方 除了 获得 $this->Auth->user('id')。
我不得不求助于在 save() 调用之前更新控制器的 add() 方法中的请求数据,这有效但不是 DRY。我想让 bake 在模型的 table class 中为任何具有 'created_by' 字段的实体添加行为。
有什么想法可以按照 Cake 的意图在行为中做到这一点吗?
一种可能是使用事件系统。我个人通过使用 Component
和 Behavior
通过 Model.beforeSave
事件进行通信来做到这一点。基本上,该组件负责添加一个新的侦听器,该侦听器将一个函数传递给允许检索经过身份验证的用户 ID 的行为。
您可以在此处查看 类 两者的代码:UserLinkComponent, UserLinkBehavior
并使用它们:
控制器:
$this->loadComponent('Alaxos.UserLink');
Model\Table:
$this->addBehavior('Alaxos.UserLink');
Blame 行为满足您的需求。您可以使用它或研究它的代码来实现您自己的代码。
我想创建一个行为,以便在使用登录用户的 ID 保存记录时自动填充 'created_by' 字段,就像时间戳对 'created' 所做的那样。但是,显然您可以在模型中的任何地方 除了 获得 $this->Auth->user('id')。
我不得不求助于在 save() 调用之前更新控制器的 add() 方法中的请求数据,这有效但不是 DRY。我想让 bake 在模型的 table class 中为任何具有 'created_by' 字段的实体添加行为。
有什么想法可以按照 Cake 的意图在行为中做到这一点吗?
一种可能是使用事件系统。我个人通过使用 Component
和 Behavior
通过 Model.beforeSave
事件进行通信来做到这一点。基本上,该组件负责添加一个新的侦听器,该侦听器将一个函数传递给允许检索经过身份验证的用户 ID 的行为。
您可以在此处查看 类 两者的代码:UserLinkComponent, UserLinkBehavior
并使用它们:
控制器:
$this->loadComponent('Alaxos.UserLink');
Model\Table:
$this->addBehavior('Alaxos.UserLink');
Blame 行为满足您的需求。您可以使用它或研究它的代码来实现您自己的代码。