Zend Framework 1には、URLルートを解析し、簡単にアクセスできるように$_GETスーパーグローバルで見つかったパラメーターを設定する非常に簡単な方法がありました。もちろん、コントローラー内で-> getParam($ something)を使用することもできますが、URLでパラメーターが見つかった場合は、$_GETを介してアクセスすることもできます。
URLの例mypage.com/mymodule/mycontroller/myaction/someparam/5:
ZF1
$this->getParam('someparam'); // 5
$_GET['someparam']; // 5
ZF2
$this->getEvent()->getRouteMatch()->getParam('someparam'); // 5
$_GET['someparam'] // undefined index someparam
明らかに、違いは、ZF2がルートパラメータを$_GETスーパーグローバルに配置しないことです。
コントローラーを拡張し、それを実行するコンストラクターを定義するだけなので、解析されたパラメーターを$ _GETスーパーグローバルに配置するにはどうすればよいですか(RouteMatchはまだオブジェクトではなく、コントローラーのコンストラクターから呼び出すことができないため)?
私のコントローラーのすべてを呼び出す$_GET = $this->getEvent()->getRouteMatch()->getParam('someparam');
ことは機能しますが、私はそれを望んでいません。
つまり、上記のURLの例に従って、$ _ GET ['someparam']を実行し、アプリケーションの任意のコンポーネントで値「5」を取得できるようにしたいのです。
編集:私は十分に明確ではなかったように見えるので、もう少し明確にしようとします。/ key/valueフォーメーションを介してURLに入力したパラメータを$_GETですぐに利用できるようにしたい。パラメータの取得に実際には問題はありません。取得方法を知っており、Zendのコントローラを拡張したので、ZF1のように$ this-> getParamsを再度呼び出すことができます。これで、すべてのコントローラがそのパラメータを拡張します。 URLからのパラメータも自動的に$_GETに含まれるため、$_GETをネイティブに使用するサードパーティコンポーネントで簡単にアクセスできます。
編集2:Samuel Herzogの回答に対する反応として更新:ライブラリは$ _GETに直接アクセスする必要があるように構築されているため、この場合はSRPを無効にしてもかまいません-独自のフィルタリングを行い、直接依存していますこのスーパーグローバルで。また、処理のために$_FILESと$_POSTを直接フェッチします。これは、コードが機能する方法です。
抽象コントローラーで次のメソッドを作成しました。$this->mergeGet(); これにより、基本的に$ _GETがすべてのルート一致パラメーターを吸収し、すべてが意図したとおりに機能しますが、すべてのコントローラー/アクションでライブラリが必要になるため、毎回そのメソッドを呼び出すのは面倒になる可能性があります。コントローラだけがZF1のようにinit()メソッドを持っていた場合...