2015-07-03 56 views
0

我的登录表单可能会被重定向查询调用,而且我想知道是否有一种简单的方法可以将其包含在后续的操作中。Zend Framework 2 - 在表单动作中包含一个变量

用例用于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参数。

所以我的问题是,是否有可能更新的行动,包括重新直接的网址,以便当用户点击登录时,它被张贴回我的表格?

谢谢!

编辑 - 很显然,我可以在configs中创建一个redirectTo路由,并在初始调用页面时测试这个路由的存在,并将其包含在表单中。然而,我的问题是,这是否可以通过视图自动完成。

+0

我向您展示的代码在视图文件中创建了url。你为什么要触摸路由配置? – Stanimir

回答

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,)))); 
+0

这将工作,如果我从控制器抓取重定向url并发送到视图。不过,我想知道是否可以跳过这一步... – HappyCoder

+0

没有,我知道。您必须从控制器执行此操作。这就是为什么有看法助手。 – Stanimir

+0

是真的 - 感谢您的帮助。 – HappyCoder

0

$form->setAttribute('action', $this->url('login', [ 'query' => [ 'redirectTo' => $this->params()->fromQuery('redirectTo') ] ]);

在哪里 '登陆' 是登录路由的名称。

Url View Helper

+0

我不认为这会在视图中工作:$ this-> params() – HappyCoder

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