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

Zend Framework 2 - Including a variable in a form action

我的登录表单可能会被重定向查询调用,我想知道是否有一种简单的方法可以将其包含在后续的 post 操作中。

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

所以我的问题是,是否可以更新操作以包含重定向 url,以便当用户点击登录时,它会 post 返回到我的表单?

谢谢!

编辑 - 显然,我可以在配置中创建一个 redirectTo 路由,并在对页面的初始调用上测试是否存在这样一个路由,并将其包含在表单中。然而,我的问题是这是否可以简单地从 viewscript 自动完成。

要从视图助手生成查询字符串参数,您需要使用查询键将它们指定为第三个参数。请参考 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,))));

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

其中 'login' 是登录路由的名称。

Url View Helper

好吧,我的解决方案并不像我希望的那样优雅。我想避免将控制器用于查询参数。正如@Stanimir 指出的那样,视图助手实际上是为了帮助查看,所以我最初的想法是没有根据的。

这是我整理的全部内容:

控制器:

 $redirect_url = $this->params()->fromQuery('redirectTo',null);

Returns 在初始加载时查看:

return new ViewModel( ['form' => $this->loginForm , 'redirect_url' => $redirect_url] );

查看

$form->setAttribute(
     'action', 
     $this->url( 
         'customer/login', [] , 
         [ 'query'=> 
              [ 'redirectTo' => $this->redirect_url ] 
         ] 
      ) 
 );