是的,這是一個可能的動作的方法之一,採用了佈局和基本控制器。
如果您來自Yii代碼生成器,應在components
文件夾中有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
指控制器,和控制器將繼承名爲$user_profile
的屬性。
但是,您應該在登錄會話時指定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;
}
}
如果你需要重複控制器邏輯,它不應該在那裏。您可以創建一個服務類來處理共享邏輯。 – Bart
好吧@Bart謝謝你,任何建立一個服務類來處理共享邏輯的建議? – Martin