【问题标题】:CakePHP 3 - check variable from controller in modelCakePHP 3 - 从模型中的控制器检查变量
【发布时间】:2019-10-11 12:04:30
【问题描述】:

我是 CakePHP 的新手,我现在需要帮助。

在应用程序中,我有这个可以从控制器访问的变量。

$this->Auth->user('is_admin')

我需要为模型中的所有查找应用过滤器。所以在 ContactsTable.php 我有这个

public function beforeFind($event, $query, $options) {  
  $alias = $event->subject()->alias();
  $query->where([$alias.'.deleted is null']);
  return $query;
}

现在,我只需要为没有管理员用户的用户添加这个“位置”。所以我的问题是如何在这个模型中读取$this->Auth->user('is_admin')

谢谢

【问题讨论】:

  • 正如文档所说,Components 是控制器之间共享的逻辑包。您是否尝试在 Controller 中使用 find($type = null, array $options = []) 选项传递身份验证状态?

标签: php cakephp activerecord


【解决方案1】:

1) 您可以将 auth cariable 作为参数传递给 finder:

//controller 
$result = $this
    ->Users
    ->find('myCustomFinder' , [
        'is_admin' => $this->Auth->user('is_admin')
    ]);

2) 或者您可以直接在模型中访问会话变量,但这不是一个好习惯,而且测试起来有点困难。

// model
public function beforeFind($event, $query, $options) 
{  
    $is_admin = \Cake\Routing\Router::getRequest()
        ->session()
        ->read('Auth.User.is_admin');

    // edit: 
    if($is_admin) {
       return $query->withAdminStuff();
    }

    return $query->nonAdminStuff();
}

【讨论】:

  • 谢谢。我认为我为我的问题写了不好的解释。我不想将此变量设置为我的 sql 查询作为条件,但我需要在 query->where() 之前使用 beforeFind 中的 if() 对其进行评估。编辑:我对这个模型的所有查询都需要这个。
  • 那你可以使用第二个选项,就写if($is_admin) {...}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多