如何从 cakephp 默认布局调用控制器?
how to call controllers from the cakephp default layout?
我有一个名为 UsersController
的控制器,有什么方法可以从这个控制器输出一些值到 cakephp 默认布局吗?
这是我尝试过的 default.ctp
:
<?php foreach ($users as $user): ?>
<ul class="nav navbar-nav navbar-right">
<?php if (!$this->Session->read('Auth.User.id')) : ?>
<li>
<?php echo $this->Html->link('Login',array('controller' => 'us 'action' => 'login', 'full_base' =>'true)); ?></li>
<li>
<?php echo $this->Html->link('Register', array('controller' => 'users', 'action' => 'add', 'full_base' => true)); ?>
</li>
<?php else: ?>
<li class="dropdown">
<a href="<?php echo $this->Html->url(array('controller' => 'users', 'action' => 'edit', 'full_base' => true)); ?>" class="dropdown-toggle" data-toggle="dropdown">
<?php if(empty($user[ 'User'][ 'filename'])){ ?>
<i class="fa fa-user fa-lg"></i>
<?php }else{ echo $this->Html->image($user['User']['filename'], array('alt' => $user['User']['username'],'class'=>'img-responsive img-rounded','width'=>'32','height'=>'32','style'=>'display:inline; background:red;')); } ?>
<?php $users[ 'User'][ 'username']; ?> <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="<?php echo $this->Html->url(array('controller' => 'users', 'action' => 'edit', 'full_base' => true)); ?>"> <i class="fa fa-gear fa-lg"></i> Settings</a>
</li>
<li>
<a href="<?php echo $this->Html->url(array('controller' => 'users', 'action' => 'logout', 'full_base' => true)); ?>"> <i class="fa fa-power-off fa-lg"></i> Logout</a>
</li>
<li><a href="#">Something else here</a>
</li>
<li class="divider"></li>
<li><a href="#">Separated link</a>
</li>
</ul>
</li>
<?php endif; ?>
</ul>
<?php endforeach; ?>
这是我的 AppController.php:
public function beforeFilter(){
return $this->getuser();
}
public function getuser($id = null){
$this->loadModel('User');
$user = $this->User->find('all', array(
'conditions' => array('User.id' => $id)
));
$this->set('users',$user);
}
此代码的问题在于,它不断返回以下通知,
Notice (8): Undefined index: User [APP\View\Layouts\default.ctp, line
71]
请问我该如何解决这个问题?
只需更改您使用过的控制器
public function getuser($id = null){
而不是这个用途
public function beforeRender($id = null) {
您的 AppController.php 代码应如下所示
public function beforeFilter(){
return $this->getuser();
}
public function beforeRender($id = null){
$this->loadModel('User');
$user = $this->User->find('all', array(
'conditions' => array('User.id' => $id)
));
$this->set('users',$user);
}
如果您想要登录用户的所有字段,您可以在您的视图中使用它。
$user = $this->Session->read('Auth.User'));
这将 return 来自用户的所有存储数据(用户名、文件名、来自用户 table 的所有字段)
我有一个名为 UsersController
的控制器,有什么方法可以从这个控制器输出一些值到 cakephp 默认布局吗?
这是我尝试过的 default.ctp
:
<?php foreach ($users as $user): ?>
<ul class="nav navbar-nav navbar-right">
<?php if (!$this->Session->read('Auth.User.id')) : ?>
<li>
<?php echo $this->Html->link('Login',array('controller' => 'us 'action' => 'login', 'full_base' =>'true)); ?></li>
<li>
<?php echo $this->Html->link('Register', array('controller' => 'users', 'action' => 'add', 'full_base' => true)); ?>
</li>
<?php else: ?>
<li class="dropdown">
<a href="<?php echo $this->Html->url(array('controller' => 'users', 'action' => 'edit', 'full_base' => true)); ?>" class="dropdown-toggle" data-toggle="dropdown">
<?php if(empty($user[ 'User'][ 'filename'])){ ?>
<i class="fa fa-user fa-lg"></i>
<?php }else{ echo $this->Html->image($user['User']['filename'], array('alt' => $user['User']['username'],'class'=>'img-responsive img-rounded','width'=>'32','height'=>'32','style'=>'display:inline; background:red;')); } ?>
<?php $users[ 'User'][ 'username']; ?> <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="<?php echo $this->Html->url(array('controller' => 'users', 'action' => 'edit', 'full_base' => true)); ?>"> <i class="fa fa-gear fa-lg"></i> Settings</a>
</li>
<li>
<a href="<?php echo $this->Html->url(array('controller' => 'users', 'action' => 'logout', 'full_base' => true)); ?>"> <i class="fa fa-power-off fa-lg"></i> Logout</a>
</li>
<li><a href="#">Something else here</a>
</li>
<li class="divider"></li>
<li><a href="#">Separated link</a>
</li>
</ul>
</li>
<?php endif; ?>
</ul>
<?php endforeach; ?>
这是我的 AppController.php:
public function beforeFilter(){
return $this->getuser();
}
public function getuser($id = null){
$this->loadModel('User');
$user = $this->User->find('all', array(
'conditions' => array('User.id' => $id)
));
$this->set('users',$user);
}
此代码的问题在于,它不断返回以下通知,
Notice (8): Undefined index: User [APP\View\Layouts\default.ctp, line 71]
请问我该如何解决这个问题?
只需更改您使用过的控制器
public function getuser($id = null){
而不是这个用途
public function beforeRender($id = null) {
您的 AppController.php 代码应如下所示
public function beforeFilter(){
return $this->getuser();
}
public function beforeRender($id = null){
$this->loadModel('User');
$user = $this->User->find('all', array(
'conditions' => array('User.id' => $id)
));
$this->set('users',$user);
}
如果您想要登录用户的所有字段,您可以在您的视图中使用它。
$user = $this->Session->read('Auth.User'));
这将 return 来自用户的所有存储数据(用户名、文件名、来自用户 table 的所有字段)