Zend Framework 2 - 在表单操作中包含变量

时间:2015-07-03 14:23:59

标签: forms zend-framework2

我可以通过重新直接查询来调用我的登录表单,我想知道是否有一种简单的方法可以在后续的帖子操作中包含它。

用例是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路由,并测试对页面的初始调用是否存在这样的路由并将其包含在表单中。然而,我的问题是,这是否可以通过视图自动完成。

3 个答案:

答案 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'是登录路线的名称。

请参阅Url View Helper

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