我有以下型号:
class Site extends AppModel {
public $name = "Site";
public $useTable = "site";
public $primaryKey = "id";
public $displayField = 'name';
public $hasMany = array('Item' => array('foreignKey' => 'siteId'));
public function canView($userId, $isAdmin = false) {
if($isAdmin) { return true; }
return array_key_exists($this->id, $allowedSites)!==false;
}
}
和
class Item extends AppModel {
public $name = "Item";
public $useTable = "item";
public $primaryKey = "id";
public $displayField = 'name';
public $belongsTo = array('Site' => array('foreignKey' => 'siteId'));
public function canView($userId, $isAdmin = false) {
// My problem appears to be the next line:
return $this->Site->canView($userId, $isAdmin);
}
}
在我的控制器中,我正在做这样的事情:
$result = $this->Item->read(null, $this->request->id);
// Verify permissions
if(!$this->Item->canView($this->Session->read('userId'), $this->Session->read('isAdmin'))) {
$this->httpCodes(403);
die('Permission denied.');
}
我注意到 inItem->canView()
$this->data['Site']
填充了站点表中的列数据。但它只是一个数组而不是一个对象。
另一方面$this->Site
是一个 Site 对象,但它还没有填充站点表中的列数据,例如$this->data
.
让 CakePHP 将关联模型作为对象(因此我可以在其上调用方法)并包含数据的正确方法是什么?还是我对这一切都错了?
谢谢!