Alb*_*ert 2 cakephp cakephp-2.4
我有一个条件,在检索数据时我的大多数模型都必须遵守这个条件.
此条件将是用户登录的公司的ID.例如,假设公司ID为1,则必须显示与company_id 1相关的所有信息.
如何为模型设置默认条件?
检查此代码
class FooModel extends AppModel {
protected $_companyId = null;
public function setCompanyId($companyId) {
// Optional validation of the id here
$this->_companyId = $companyId;
}
public function beforeFind($query) {
if (!empty($this->_companyId)) {
$query['conditions'][$this->alias . '.company_id'] = $this->_companyId;
}
return $query;
}
}
Run Code Online (Sandbox Code Playgroud)
为了将它与模型分离,我建议您在行为中实现这两种方法,并将其仅附加到需要它的模型中.
编辑,此处为行为:
class CompanyFilterBehavior extends ModelBehavior {
protected $_companyId = null;
public function setCompanyId(Model $Model, $companyId) {
// Optional validation of the id here
$this->_companyId = $companyId;
}
public function beforeFind(Model $Model, $query) {
if (!empty($this->_companyId)) {
$query['conditions'][$Model->alias . '.company_id'] = $this->_companyId;
}
return $query;
}
}
Run Code Online (Sandbox Code Playgroud)
在AppController中,您可以这样做:
public function beforeFilter() {
if ($this->User->loggedIn()
&& $this->{$this->modelClass}->Behaviors->loaded('CompanyFilter'))
{
$this->{$this->modelClass}->setCompanyId($this->Auth->user('company_id'));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |