0

因此,用户被定向到我的 ZF2 应用程序中的页面,如下所示:

http://example.com/some/route/variable?auth=1234&channel=1234&tz=1234&locale=&client=1234

控制器加载一个表单:

if ($prg instanceof Response) {
    return $prg
} elseif ($prg === false) {

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

在视图中:

$form = $this->form;
$form->setAttribute('action', $this->url('some/route',[],true));
$form->setAttribute('method', 'post');

我想要发生的是当用户调用它发布到相同入站路由的表单时,即:

http://example.com/some/route/variable?auth=1234&channel=1234&tz=1234&locale=&client=1234

有没有一种愚蠢的简单方法可以做到这一点?

还是我需要获取每个参数,并明确地将它们放在目标 uri 的形式中?:

$form->setAttribute('action', $this->url('some/route',[],[query => [''] ]));

就目前而言,我已经编写了一个助手来处理这个问题:

namespace Some\View\Helper;

use Zend\View\Helper\AbstractHelper;


class ParamsHelper extends AbstractHelper {

    public function __invoke()
    {
        $param1 = (isset($_GET['param1'])) ? $_GET['param1'] : '';
        $param2 = (isset($_GET['param2'])) ? $_GET['param2'] : '';
        $param3 = (isset($_GET['param3'])) ? $_GET['param3'] : '';
        $param4 = (isset($_GET['param4'])) ? $_GET['param4'] : '';
        $param5 = (isset($_GET['param5'])) ? $_GET['param5'] : '';

        $queryParams = (null == $auth) ? [] : ['query' =>
                                                   [
                                                       'param1' => $param1 ,
                                                       'param2' => $param2 ,
                                                       'param3' => $param3 ,
                                                       'param4' => $param4,
                                                       'param5' => $param5
                                                   ]
                                                ];

        return $queryParams;
    }

}

这解决了这个问题,但它似乎仍然是一种冗长且不那么动态的解决问题的方式......

4

1 回答 1

1

有一个Url视图助手,但这个助手确实(令人惊讶地)没有为您提供带有查询参数的完整请求 url。但是ServerUrlZF2 中也有一个助手,如果像这样使用,这个助手会为您提供完整的 url,包括查询参数:

在你的例子的情况下:

http://example.com/some/route/variable?auth=1234&channel=1234&tz=1234&locale=&client=1234

它将执行以下操作:

$viewHelperManager = $serviceManager->get('ViewHelperManager');

$urlHelper = $viewHelper->get('url');
$serverUrlHelper = $viewHelper->get('serverUrl');

$urlHelper(); // --> /some/route/variable
$serverUrlHelper(true); // --> http://example.com/some/route/variable?auth=1234&channel=1234&tz=1234&locale=&client=1234

在您看来,简单如下:

$this->url(); // --> /some/route/variable

$this->serverUrl(); // --> http://example.com/some/route/variable?auth=1234&channel=1234&tz=1234&locale=&client=1234

注意实际上 更多的人抱怨无法在 url view helper 中重用查询参数。在该页面上,还有一个指向替代(重构)Url帮助程序类的链接,该类可以重用查询参数。

于 2015-12-10T08:31:08.857 回答