我正在尝试访问已登录用户的电子邮件地址,我可以在所有控制器中成功完成此操作。
这是我得到的错误
Notice (8): Undefined index: User [APP/View/Layouts/default.ctp, line 37]
这是相应的代码行(请记住,这适用于我所有其他控制器)。
<center><font color="black"><td><?php echo $user['User']['email']; ?></td></text></center>
这是DemosController
<?php
// app/Controller/DemosController.php
class DemosController extends AppController {
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('add','logout');
$user = $this->Demo->read(null, $this->Auth->user('id')); //this throws the error
//$user = $this->Demo->User->read(null, $this->Auth->user('id')); //Fatal error: Call to a member function read() on a non-object in
$this->set('user', $user);
}
//display the knockout table
public function index($article = null) {
}
}
我不需要数据库中的这个Controller的表。它只是为了演示目的而显示一个表格。我可以让它引用用户吗?
class Demo extends AppModel {
public $name = 'User';
}
为什么我可以在除此之外的所有控制器中访问它? Model / table情况是否导致错误?如果是这样,有没有办法禁用表格?
答案 0 :(得分:2)
你有几个问题:
首先,在不使用表时,将模型的$useTable
属性设置为false。
其次,没有表,没有数据库调用可以工作(无论如何只需将示例数据插入表中,谁知道它是否是演示?)
仍然提到$this->Model->read()
用于更新记录。将行更改为以下将允许设置调用正常运行:
$this->Demo->find('first', array(
'conditions' => array(
'Demo.field' => $this->Auth->user('id')
)));
答案 1 :(得分:1)
您不必须通过'viewVar'将当前登录用户的信息传递给视图。
要访问控制器外部当前登录用户的属性,请使用AuthComponent
在您的视图或布局中,输出如下信息;
<p>The current users email is: <?php echo AuthComponent::user('email') ?></p>
<p>The current users id is: <?php echo AuthComponent::user('id') ?></p>
<p>And all properties of the user are:</p>
<pre><?php print_r(AuthComponent::user());?></pre>
请参阅:Accessing the logged in user
您可以从beforeFilter()
;
$user = $this->Demo->read(null, $this->Auth->user('id')); //this throws the error
//$user = $this->Demo->User->read(null, $this->Auth->user('id')); //Fatal error: Call to a member function read() on a non-object in
$this->set('user', $user);