Лучший способ сохранить параметры в URI для 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

Есть ли тупо простой способ сделать это?

Или мне нужно получить каждый параметр и подробно поместить их в форму target 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;
    }

}

Это решает проблему, однако все еще кажется длинным и не очень динамичным способом решения проблемы...

1 ответ

Решение

E сть Url view helper, но этот помощник (что удивительно) не дает вам полный URL-адрес запроса с параметрами запроса. Но есть и ServerUrl помощник в ZF2, и этот дает вам полный 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. На этой странице также есть ссылка на альтернативу (рефакторинг) Url вспомогательный класс, который повторно использует параметры запроса.

Другие вопросы по тегам