我有2个模型/视图/控制器-用户和作业
通过Auth方法,我在AppController中设置了以下内容:
$this->set('current_user', $this->Auth->user());
因此,一旦用户登录到系统,我就可以使用用户数据。
我在用户表中有id、姓名、电子邮件、用户名等,还有一个名为“group_id”的字段。我在jobs表中还有一个“group_id”字段,我只想显示/允许访问job记录中的group_id与用户的group_id匹配的记录。
因此,我可以在jobs index视图中使用以下内容:
echo var_dump($current_user);
它会打印出这样的东西:
array(11) { ["id"]=> string(2) "13" ["firstname"]=> string(2) "My" ["surname"]=> string(4) "Name" ["email"]=> string(25) "myname@anemailaddress.com" ["username"]=> string(6) "myname" ["muso_email_notify"]=> string(1) "0" ["group_id"]=> string(1) "1" ["active"]=> string(1) "0" ["activationID"]=> string(0) "" ["memberaccesslevel"]=> string(1) "0" ["role"]=> string(7) "regular" }
所以,现在,当我选择我的工作控制器中的所有工作,我想使用这样的东西(它可能不太正确):
$this->set('jobs', $this->Job->find('all', array(
'conditions' => array('Job.group_id' => $current_user['group_id']))));
但是,当我转到作业的索引视图时,我得到了未定义的变量错误:
注意(8):未定义变量:当前用户[APP/Controller/JobsController.php,第9行]
我不知道我做错了什么?变量在视图中工作,但在控制器逻辑中不工作。
我使用蛋糕2.3.4与mysql数据库
美元这个-
public function someFunction() {
$current_user = $this->Auth->user();
echo $current_user['group_id'];
}
如果您希望避免在每个函数上都这样做,并且每个函数都有一个当前用户变量,请在AppController中执行类似的操作
class AppController extends Controller {
//create new variable
public $_current_user = array();
public function beforeFilter() {
$this->_current_user = $this->Auth->user();
$this->set('current_user', $this->_current_user);
}
}
您将在控制器中使用$this获得当前用户-
无论哪种方式,它都将对您可用,这取决于您希望如何访问变量。无论如何,请记住,$this-
对于一般的变量,Nunser提供了一些有用的信息。但是,为了获取当前登录用户的信息,AuthComponent还有一个“静态”界面,允许您访问应用程序中任何位置的用户信息。
使用静态界面可以更容易地访问这些信息,并且使代码更干净,因为您不必设置“viewVars”来将这些信息传递给视图/元素,如果您需要在多个控制器的不同视图/操作中使用这些信息,这将减少代码重复。
例如,要获取视图中当前用户的group_id
,只需执行以下操作:
echo AuthComponent::user('group_id');
如前所述,这可以在应用程序中的任何位置使用,因此,例如,也可以在助手中使用(甚至可以在模型中使用,但这可能不是正确的MVC)
有关详细信息,请阅读手册的这一部分:访问登录用户