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 を提供しません。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ヘルパー クラスへのリンクもあります。

于 2015-12-10T08:31:08.857 に答える