【问题标题】:Yii How to getState() and display the variableYii 如何获取状态()并显示变量
【发布时间】:2014-10-31 18:23:44
【问题描述】:

我目前正在登录,结果运行良好。但是,我希望从 DB 中获取用户的名字和姓氏。

据我所知 getState() 能够从数据库中获取变量数据。

下面是登录代码:

$username = $_POST['username'];
$userpass = $_POST['userpass']; 


$record=Games::model()->findByAttributes(array('email'=>$username));

if($record===null){
    //somethings
}else if($this->checkPassword($record->password,$userpass)){
    //somethings

}else
{
    $this->_id=$record->id;
    $this->_email=$record->email;

    Yii::app()->user->setState('id', $record->id);
    Yii::app()->user->setState('email', $record->email);
    Yii::app()->user->setState('firstname', $record->firstname);
    Yii::app()->user->setState('lastname', $record->lastname);

    //go to somethings
}

可见

<?php 
    $username_first = Yii::app()->user->getState('firstname');
    $username_last  = Yii::app()->user->getState('lastname'); 
?>
    <a href="#" ><?php echo $username_first.' '.$username_last; ?></a>

我的代码有什么问题?对于 getState() 我需要的数据有什么更好的建议吗?

更新:

我尝试在控制器中打印出来......它工作......但为什么不能查看?

print_r(Yii::app()->user->getState('firstname'));

【问题讨论】:

    标签: php yii


    【解决方案1】:

    getState() 不专用于从数据库中获取变量。正如 Yii 的官方文档定义的那样:

    返回存储在用户会话中的变量的值。

    通过设置状态,您可以将变量的值存储到用户会话中,您可以通过getState() 获取该值。

    作为建议,当您使用getState() 时,将默认值传递给第二个参数,如下所示:

    $email=Yii::app()->user->getState('email',NULL);
    if(!is_null($email)) //do something
    

    最好在通过hasState() 获取状态之前检查状态,如下所示:

    if(Yii::app()->user->hasState('email')){
         $email=Yii::app()->getState('email',NULL);
    }
    

    另一个注意事项是,最好在Controller 中获取存储的值并将它们传递给视图,而不是让它们出现在视图中。看看:

    控制器

    $email=Yii::app()->user->getState('email'); //it is better to check it via has state, and also passing a default value 
    $this->render('view',array(
        'userEmail'=>$email
    ));
    

    查看

    <h2><?php echo $email; ?></h2>
    

    更新

    有一个条件是您可能需要将存储的值放入会话(setState()),因此您可以在视图中执行以下操作:

    if(Yii::app()->user->hasState('firstname')) { echo Yii::app()->user->getState('firstname'); } //All done
    

    【讨论】:

    • 对不起,我解释错了...是会话...我在我的控制器中尝试了print_r(Yii::app()-&gt;user-&gt;getState('firstname'));...它有效...为什么在视图中它不能?您有任何示例可以将值传递给 view 吗?谢谢
    • 渲染将加载到该页面,对吗?如果正确,我如何在不加载的情况下将值传递到该页面?
    • 如果不加载该页面,我不明白您的意思,而如果您正在渲染视图,则会渲染该视图的内容。如果不想渲染任何视图,可以跳过渲染。但是,如果您想在不传递到控制器的情况下获取所有视图中的值,您可以通过Yii::app()-&gt;hasState()getState() 在视图中简单地执行此操作。 hasState() 确保您拥有进入会话的价值
    • 如果我跳过渲染来查看这样的东西? $firstname=Yii::app()-&gt;user-&gt;getState('firstname'); $this-&gt;render(array('firstname'=&gt;$firstname)); ...它仍然能够将值传递给所有页面?
    • 不,亲爱的,当您在控制器中渲染视图时,它专用于渲染它的控制器。在每个页面中,您必须在视图中或在控制器中使用 getState 并将其传递到视图中。另外,你写的渲染语法是错误的。 $this-&gt;render('VIEW_NAME',array('firstname'=&gt;$firstname));
    猜你喜欢
    • 2015-10-13
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2019-08-22
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多