将参数保留在 zf2 的 uri 中的最佳方法
Best way to keep params in the uri for zf2
所以用户被定向到我的 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;
}
}
这解决了问题,但它似乎仍然是一种冗长而不是动态的解决问题的方法...
有一个 Url
view helper 但这个助手确实(令人惊讶地)没有给你完整的请求 url 和查询参数。但是在 ZF2 中还有一个 ServerUrl
帮助器,如果像这样使用,这个会为您提供完整的 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
注意 are actually more people who complain 关于无法在 url 视图助手中重用查询参数。在该页面上还有一个 link 替代(重构)Url
帮助器 class 确实重用查询参数。
所以用户被定向到我的 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;
}
}
这解决了问题,但它似乎仍然是一种冗长而不是动态的解决问题的方法...
有一个 Url
view helper 但这个助手确实(令人惊讶地)没有给你完整的请求 url 和查询参数。但是在 ZF2 中还有一个 ServerUrl
帮助器,如果像这样使用,这个会为您提供完整的 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
注意 are actually more people who complain 关于无法在 url 视图助手中重用查询参数。在该页面上还有一个 link 替代(重构)Url
帮助器 class 确实重用查询参数。