我是cakephp的新手..实际上我有两个问题..第一个是 我在AppController中设置变量以便在其中使用它们 default.thtml中。
public function beforeRender(){
$id = $this->Auth->user('idUser');
$this->loadModel('Userinfo');
$data= $this->Userinfo->find('all',array(
'conditions' => array('Userinfo.User_id' => $id)
));
foreach($data as $d){
$product_purchase = $d['Userinfo']['product_purchase'];
}
$this->set('userinfo',$product_purchase);
}
所以当我将变量用于我的default.ctp布局时它工作正常..但问题是当我从应用程序注销然后它在我的登录页面上显示此错误
未定义的变量:product_purchase
我做错了什么? 我想在这里提到的方式是,在我的登录页面中,我没有使用default.ctp,我认为它与dat无关
第二个问题是我想为特定用户显示特定的菜单项...所以我在我的视图页面中这样做
<?php if ($userinfo == 1){ ?>
<li><a href="explorer.html" class="shortcut-medias" title="Media">Media</a> </li>
<?php }else{ //nothing }?>
userinfo中的值为2 ..但如果其他方法无效..它仍然显示菜单
答案 0 :(得分:1)
product_purchase
未初始化如果先前的查找调用没有结果,则不会定义变量$product_purchase
来触发未定义的变量错误。如果没有登录用户,则会出现这种情况:
public function beforeRender(){
// will be null if there is no user
$id = $this->Auth->user('idUser');
// unnecessary find call if there is no user, returning no rows
$this->loadModel('Userinfo');
$data= $this->Userinfo->find('all',array(
'conditions' => array('Userinfo.User_id' => $id)
));
// will not enter this foreach loop as data is empty
foreach($data as $d){
$product_purchase = $d['Userinfo']['product_purchase'];
}
// $product_purchase is undefined.
$this->set('userinfo',$product_purchase);
}
对于问题中的代码,只需先修改变量:
public function beforeRender(){
$product_purchase = null;
请注意,如果为此查询返回了多行数据:
foreach($data as $d){
$product_purchase = $d['Userinfo']['product_purchase'];
}
$product_purchase
变量仅包含 last 行的值。
如果只有一个结果 - 使用适当的方法。不要使用find('all')
- 使用find('first')
。或者考虑到只检索一个字段的事实 - 直接使用field
方法:
$product_purchase = $this->Userinfo->field(
'product_purchase',
array('Userinfo.User_id' => $id))
);