CakePHP分页'条件'受限于$ this-> Session-> read()

时间:2014-01-04 04:06:23

标签: cakephp cakephp-2.4

我试图通过$ this-> Session-> read('Player.team_id')限制我的分页结果...以便登录用户只能看到他的相关团队成员。

PlayersController.php

public $paginate = array(
    'conditions' => array(
                'Player.team_id' => $this->Session->read('Player.0.Team.id')
             ),
    'limit' => 20,
    'order' => array('Player.fullname' => 'asc')
);

public function index() {
        $this->Paginator->settings = $this->paginate;
        $this->Player->recursive = 0;
        $this->set('players', $this->Paginator->paginate());
    }

这会在查看播放器/索引

时导致错误

错误:语法错误,意外T_VARIABLE
文件:/home/www/public_html/dev/app/Controller/PlayersController.php
行:21

如果我硬编码下面的'条件'那么它工作正常,只检索我想要的记录

'conditions' => array('Player.team_id' => 1)

在Player.php模型登录操作中,它会编写会话变量Team.id和Team.name。

我已经在我的应用程序(视图和其他模型)中使用了$ this-> Session-> read else,它运行正常。它在分页组件中似乎没有用处?

1 个答案:

答案 0 :(得分:0)

这只是无效的PHP语法,类成员只能用常量值初始化,即可以在编译时计算的值(字符串,数字,布尔值,数组等等)

在运行时在Controller::beforeFilter()回调中分配会话值(或者在适当情况下直接在index()操作中),而不是:

public $paginate = array(
    'limit' => 20,
    'order' => array('Player.fullname' => 'asc')
);

public function beforeFilter() {
    parent::beforeFilter();

    $this->paginate['conditions'] = array(
        'Player.team_id' => $this->Session->read('Player.0.Team.id')
    );
}

同样如评论中所指出,请确保您访问的会话密钥确实存在且保持预期值!

另请参阅 http://www.php.net/manual/en/language.oop5.properties.php