如何使用:$ this-> Auth->用户('id')在模型中? Cakephp 3.0

时间:2015-05-27 11:41:29

标签: cakephp authentication model cakephp-3.0

我一直致力于瘦瘦的控制器胖模型方式。之前,我在我的控制器中使用了它:

$this
    ->find('all')
    ->contain(['Declarator'])
    ->where(['user_id' => $this->Auth->user('id')])
    ->order(['Declarations.created' => 'DESC']);

但是,$this->Auth->user('id')在模型中不起作用。

还有哪些方法可以从模型中的经过身份验证的用户处获取ID?

3 个答案:

答案 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');

来源: http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#accessing-the-logged-in-user

版本3.x的文档: http://book.cakephp.org/3.0/en/controllers/components/authentication.html#accessing-the-logged-in-user