0

Zend Framework 2 で RESTful API を構築しています。ルートはarticle/personです。idが url に渡されない場合getList()、 ではなくメソッドが呼び出されることを知っていget()ます。

私の場合、idget または post パラメーターとして渡しませんが、HTTP ヘッダーで渡します。idデータベース操作を実行するために使用するのでget()、メソッドではなくメソッドを呼び出す必要がありgetList()ます。それを行うためにコードを微調整するにはどうすればよいですか?

ルーティングで呼び出す正確なメソッド名を指定することは可能ですか?

4

3 に答える 3

4

get または post パラメーターとして id を渡しませんが、HTTP ヘッダーで渡します

これにより REST が無効になるため、実際には REST ではなくなります。したがって、カスタマイズせずに RestfulAbstractController を使用することはできません。

独自の抽象コントローラーを作成するか、getIdentifierメソッドをオーバーライドできます。

protected function getIdentifier($routeMatch, $request)
{
    $identifier = $this->getIdentifierName();
    $headers    = $request->getHeaders();

    $id = $headers->get($identifier)->getFieldValue();
    if ($id !== false) {
        return $id;
    }

    return false;
}

各コントローラに正しい識別子名を設定していることを確認してください。この場合、識別子名は、使用しているヘッダーの名前と一致する必要があります。

これは、GET だけでなく、GET、PUT、PATCH、DELETE、および HEAD リクエストにも使用されることに注意してください。

/編集:

getIdentifierメソッドは、コントローラが実行するメソッドを決定するフローで呼び出されます。通常、これは次のとおりです。

  1. コントローラが構築されます
  2. コントローラーdispatchが呼び出されます (コントローラーは Dispatchable です)
  3. イベント「dispatchディスパッチ」をトリガーします
  4. メソッドonDispatchはこのイベントをリッスンします
  5. AbstractRestfulController では、メソッドはどのメソッドを呼び出すかを決定しようとします

#5 では、たとえば、リクエストがGET リクエストかどうかをチェックします。もしそうなら、与えられた識別子があるかどうかをチェックします。その場合、get()が使用されます。そうでない場合は、getList()が使用されます。「与えられた識別子があるかどうか」チェックはgetIdentifier()メソッドで行われます。

AbstractRestfulController を独自の抽象コントローラーで拡張し、 をオーバーライドするとgetIdentifier()、独自の識別子を決定できます。このようにして、ルート パラメーターまたはクエリ パラメーターの代わりにヘッダーを確認できます。

于 2014-01-02T09:01:53.117 に答える