我可以通过重新直接查询来调用我的登录表单,我想知道是否有一种简单的方法可以在后续的帖子操作中包含它。
用例是SSO登录。
我的正常登录路线是:
/customer/login
当从第三方客户端调用时变为:
/customer/login?redirectTo=http://www.example.com
我的登录操作:
public function loginAction()
{
$prg = $this->prg();
if ($prg instanceof Response) {
return $prg;
} elseif ($prg === false) {
return new ViewModel(['form' => $this->loginForm]);
}
这会加载我的视图,我当前定义了我的操作:
$form = $this->form;
$form->setAttribute('action', $this->url());
现在,当调用该动作时,我将丢失redirectTo参数。
所以我的问题是,是否可以更新操作以包含重定向网址,以便当用户点击登录时,会将其发回我的表单?
谢谢!
编辑 - 显然,我可以在配置中创建一个redirectTo路由,并测试对页面的初始调用是否存在这样的路由并将其包含在表单中。然而,我的问题是,这是否可以通过视图自动完成。
答案 0 :(得分:1)
要从视图助手生成查询字符串参数,您需要使用查询键将它们指定为第三个参数。请参阅ZF2文档http://framework.zend.com/manual/current/en/modules/zend.view.helpers.url.html
$form->setAttribute('action', $this->url('application', array('action' => 'login'), array('query' => array('redirectTo' => 'http://www.example.com,))));
答案 1 :(得分:0)
$form->setAttribute('action', $this->url('login', [
'query' => [
'redirectTo' => $this->params()->fromQuery('redirectTo')
]
]);
其中'login'是登录路线的名称。
答案 2 :(得分:0)
我的解决方案并不像我希望的那样优雅。我想避免将控制器用于查询参数。正如@Stanimir指出的那样,视图助手实际上是为了帮助查看,所以我最初的想法是没有根据的。
这是我放在一起的结束:
<强>控制器:强>
$redirect_url = $this->params()->fromQuery('redirectTo',null);
返回此内容以查看初始加载:
return new ViewModel( ['form' => $this->loginForm , 'redirect_url' => $redirect_url] );
查看强>
$form->setAttribute(
'action',
$this->url(
'customer/login', [] ,
[ 'query'=>
[ 'redirectTo' => $this->redirect_url ]
]
)
);