1

我正在尝试访问已登录用户的电子邮件地址,并且我可以在除一个之外的所有控制器中成功完成此操作。

这是我得到的错误

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) {

    }


}

我不需要此控制器的数据库中的表。它只是为了演示目的显示一个表格。我可以让它引用用户吗?

class Demo extends AppModel {
    public $name = 'User';         
}

为什么我可以在除此之外的所有控制器中访问它?模型/表格情况是否导致错误?如果是这样,有没有办法禁用表的使用?

4

2 回答 2

2

你在这里有几个问题:

首先,当不使用表格时,将模型的$useTable属性设置为 false。其次,没有表,没有数据库调用将起作用(无论如何只需将示例数据插入表中,谁知道它是否是演示?)

仍然值得一提的$this->Model->read()是用于更新记录。将行更改为以下内容将允许 set 调用正常运行:

$this->Demo->find('first', array(
     'conditions' => array(
          'Demo.field' => $this->Auth->user('id')
 )));
于 2013-04-19T02:38:12.123 回答
1

通过 AuthComponent 获取登录用户的属性

不必通过“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>

请参阅:访问已登录的用户

您可以从;中删除这些行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);
于 2013-04-19T06:37:42.397 回答