我试图通过$ 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,它运行正常。它在分页组件中似乎没有用处?
答案 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