在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上发送这个参数。
修改 我不是直接呼叫网站/登录。
答案 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 ...
}
}
答案 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)