我一直致力于瘦瘦的控制器胖模型方式。之前,我在我的控制器中使用了它:
$this
->find('all')
->contain(['Declarator'])
->where(['user_id' => $this->Auth->user('id')])
->order(['Declarations.created' => 'DESC']);
但是,$this->Auth->user('id')
在模型中不起作用。
还有哪些方法可以从模型中的经过身份验证的用户处获取ID?
答案 0 :(得分:2)
还有哪些方法可以从模型中的经过身份验证的用户处获取ID?
只需将其传递给模型方法:
public function someModelMethod($userId, array $postData) {
// Do something here, move your code from the controller here
return $something;
}
public function someControllerAction() {
$this->set('data', $this->Model->someModelMethod(
$this->Auth->user('id'),
$this->request->data
);
}
Cake没有一个层可以采用业务逻辑,因此它大部分时间都放在模型层中。 Cake也没有使用依赖注入,因此像auth对象一样传递整个实例有时很麻烦。此外,我不认为auth对象本身应该与模型层相交。我们希望避免紧密耦合。为简化此操作(也用于测试),只需将所需值传递给方法即可。
答案 1 :(得分:2)
Mayby这不是一个好主意,但在蛋糕模型中您可以使用$_SESSION['Auth']['User']['id']
获取用户ID
或者只是use Cake\Routing\Router;
类顶部的Table
,然后,您可以使用以下方式访问会话:
Router::getRequest()->getSession()->read('Auth.User.id');
答案 2 :(得分:-1)
在CakePHP 2.x中,如下所述完成。我很确定,即使它不在文档中,也可能以同样的方式完成。
// Use anywhere
AuthComponent::user('id')
// From inside a controller
$this->Auth->user('id');