gpt4 book ai didi

php - Yii,如何让 Controller 代码在所有 View 中运行

转载 作者:行者123 更新时间:2023-12-02 17:44:40 24 4
gpt4 key购买 nike

我想知道是否有一种理想的方法可以在每个 View 文件中运行相同的代码。

不必修改所有 Controller 和所有操作并添加代码片段,有没有办法让 Controller 和操作始终被任何 View (不是部分 View )调用?

我在所有 View 中需要的是获取当前登录用户并获取其他相关表中的数据的代码。

下面是其中一个view的action方法之一

public function actionIndex()
{
// the following line should be included for every single view
$user_profile = YumUser::model()->findByPk(Yii::app()->user->id)->profile;

$this->layout = 'column2';
$this->render('index', array('user_profile' => $user_profile));

}

最佳答案

是的,使用布局和基础 Controller 是可能的。

如果你来自 Yii 代码生成器,components 文件夹中应该有一个 Controller 类。

如果您的 Controller ExampleController extends Controller 而不是 CController

Controller 中你可以分配:

public function getUserProfile() {
return YumUser::model()->findByPk(Yii::app()->user->id)->profile;
}

在你的布局文件中:

<?php echo CHtml::encode($this->getUserProfile()); ?>

因为$this引用了 Controller ,而 Controller 继承了名为$user_profile的属性。

但是,您应该在登录 session 时分配profile 和其他不会随setState 变化的内容。这样你就可以做类似的事情:

 <p class="nav navbar-text">Welcome, <i><?php echo Yii::app()->User->name; ?></i></p>

在 MySQLUserIdentity 中设置状态的示例(由我完成)。

class MySqlUserIdentity extends CUserIdentity
{

private $_id;

public function authenticate()
{
$user = User::model()->findByAttributes( array( 'username' => $this->username ) );
if( $user === null )
$this->errorCode = self::ERROR_USERNAME_INVALID;
else if( $user->password !== md5( $this->password ) )
$this->errorCode = self::ERROR_PASSWORD_INVALID;
else
{
$this->_id = $user->id;
$this->setState( 'username', $user->username );
$this->setState( 'name', $user->name );
$this->setState( 'surname', $user->surname );
$this->setState( 'email', $user->email );
$this->errorCode = self::ERROR_NONE;
}
return !$this->errorCode;
}

public function getId()
{
return $this->_id;
}
}

关于php - Yii,如何让 Controller 代码在所有 View 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16612355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com