如何在Yii框架中将参数传递给站点/登录

时间:2013-04-26 07:30:27

标签: yii

在Yii框架中,当您调用某个可供登录用户访问的页面时。系统会自动重新登录到登录屏幕,如下例所示。

我没有登录请求:localhost/mysite/index.php?r=site/showprofile 系统重定向:localhost/mysite/index.php?r=site/login

我想要做的是,我想在网址上添加一些参数。像

localhost/mysite/index.php?r=site/login&fromTv=1

我发送“fromTv=1”到登录页面但是如何?记得我只在特定的occacsions上发送这个参数。

修改 我不是直接呼叫网站/登录。

4 个答案:

答案 0 :(得分:1)

嗯,首先要做的是知道Yii如何处理授权结果:

  

授权失败时,即不允许用户执行   指定的操作,可能会发生以下两种情况之一:

     
      
  • 如果用户未登录,并且用户组件的loginUrl属性配置为登录页面的URL,则   浏览器将重定向到该页面。请注意,默认情况下,   loginUrl指向 site/login 页面。

  •   
  • 否则将显示HTTP异常,错误代码为403。

  •   

http://www.yiiframework.com/doc/guide/1.1/en/topics.auth#handling-authorization-result

可以在主配置中配置

loginUrl,但这对您无需帮助,因为您有时需要在网址中添加参数...

但我认为你可以修改你的控制器访问规则来实现你想要做的事情,例如:

public function accessRules()
{
    if (...)
    {
        // custom loginUrl
        Yii::app()->user->loginUrl = array('/site/login', 'fromTv'=>1);
    }

    // .....
}

答案 1 :(得分:0)

我使用CHtml

<?php echo CHtml::link('Link Text',array('controller/action', 'param1'=>'value1')); ?>

您必须拦截请求:

class PostController extends CController
{
    public function actionCreate()
    {
        if(isset($_GET['category']))
            $category=(int)$_GET['category'];
        else
            throw new CHttpException(404,'invalid request');

        if(isset($_GET['language']))
            $language=$_GET['language'];
        else
            $language='en';

        // ... fun code starts here ...
    }
}

check here

答案 2 :(得分:0)

您可以使用CHttpRequest

$isFromTv = CHttpRequest::getParam('fromTv');

答案 3 :(得分:0)

我找到了2个问题的解决方案:

1)创建自己的login manager类,该类必须扩展CBehavior

<?php
class RequireLogin extends CBehavior
{
    public function attach($owner)
    {
         $owner->attachEventHandler('onBeginRequest', array($this, 'handleBeginRequest'));
    }


    public function handleBeginRequest($event)
    {
         if (Yii::app()->user->isGuest && in_array($_GET['r'],array('site/showprofile')){
            $this->redirect(Yii::app()->createUrl('site/login', array('fromTv'=>"1")));
         }
    }

}
?>


-> add the fallowing in `protected/config/main.php`

'behaviors' => array(
       'onBeginRequest' => array(
           'class' => 'application.components.RequireLogin'
       )
    ),

2)您可以使用function beforeAction($action)