【问题标题】:yii setflash is not working when using redirect使用重定向时 yii setflash 不工作
【发布时间】:2014-03-15 22:19:41
【问题描述】:

嘿,我有一个问题,我使用 yii 框架设计了我的网站,现在当用户注册时,我想显示注册成功并重定向到登录页面之类的内容。不幸的是,它一直重定向到登录页面而不显示任何消息。下面是我的用户控制器代码

public function actionCreate()
{
    $model=new User;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['User']))
    {
        $model->attributes=$_POST['User'];
        if($model->save()) {
            $this->redirect(array('profile'));
            Yii::app()->user->setFlash('success', 'Registration successful. Please login');

        }

    }

    $this->render('create',array(
        'model'=>$model,
    ));
}

这是我的登录代码

public function actionProfile()
{
    $model=$this->loadModel(Yii::app()->user->id);
    unset($model->password);

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['User']))
    {
        $model->attributes=$_POST['User'];
        if($model->save())
            $this->redirect(array('view','id'=>$model->id));
    }

    $this->render('update',array(
        'model'=>$model,
    ));
}   

这是我的访问标尺的代码

public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('register','create'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('profile', 'history', 'recommendation','view'),
            'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete','update','create','index'),
            'expression' => 'Yii::app()->user->isAdmin()'
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}

这是我的动作视图

public function actionView($id)
{
    $this->render('view',array(
        'model'=>$this->loadModel($id),
    ));
}

【问题讨论】:

标签: php twitter-bootstrap yii


【解决方案1】:

使用return,因为它停止了进程。

return $this->redirect();

【讨论】:

    【解决方案2】:

    我刚刚发现我的错误:

    而不是这个:

    Yii::app()->user->setFlash('success', 'Registration successful. Please login');
        $this->redirect(array('profile'));
    

    我应该这样做:

    Yii::app()->user->setFlash('success', 'Registration successful. Please login');
          $this->redirect(array('/site/login'));
    

    【讨论】:

      【解决方案3】:

      未经测试但:

       if(isset($_POST['User']))
      {
          $model->attributes=$_POST['User'];
          if($model->save()) {
              $this->redirect(array('profile'));
              Yii::app()->user->setFlash('success', 'Registration successful. Please login');
      
          }
      

      应该是

       if(isset($_POST['User']))
      {
          $model->attributes=$_POST['User'];
          if($model->save()) {
           Yii::app()->user->setFlash('success', 'Registration successful. Please login');
              $this->redirect(array('profile'));
      

      您还需要检查视图中的 Flash 消息以显示它 }

      【讨论】:

      • 现在我能做的就是刷新我的页面,在我的 yii setflash 下方插入 $this->refresh() ...如果你们找到了解决方案,请告诉我。 ...
      • 不,你没有。正如我对你说的,你需要检查你的视图文件views/user/view.php 你需要检查flash方法的存在Yii::app()->user->hasFlash('success')):
      【解决方案4】:

      它发生了同样的事情,结果证明它不会进入“如果”,因为它没有被实现,为什么不显示消息或重定向到另一个视图。

      简而言之,可能是因为您没有满足条件。 ;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-27
        • 2016-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多