2

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

我在未登录的情况下请求:localhost/mysite/index.php?r=site/showprofile 系统重定向:localhost/mysite/index.php?r=site/login

我想要做的是,我想在 url 中附加一些参数。喜欢

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

我正在向fromTv=1登录页面发送“”,但如何?请记住,我只在特定场合发送此参数。

编辑: 我不是直接调用站点/登录名。

4

4 回答 4

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);
    }

    // .....
}
于 2013-04-26T10:17:45.703 回答
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 ...
    }
}

在这里检查

于 2013-04-26T07:37:31.123 回答
0

您可以使用CHttpRequest

$isFromTv = CHttpRequest::getParam('fromTv');
于 2013-04-26T07:38:26.343 回答
0

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

1) 创建您自己的必须扩展 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)

于 2013-04-26T21:45:47.420 回答