ただの簡単な質問です。私はいくつかのAPIを構築しています。私は、フォームリクエストを処理する簡単な親クラスを作成することを考えていました。親クラスのsymfony 4セッター注入
フォーム要求を簡単に処理したい場合は、このクラスを拡張するだけで、オブジェクトを要求し、そのオブジェクトから抽出したデータを要求し、すぐに使用できるメソッドを多数取得できます。何が、なぜ正確には問題ではありません。
問題がある:
- 私は郵便配達を通じてリクエストを送信します。
- 親クラスを拡張するクラスでrequestオブジェクトを使用しようとしましたが、要求の代わりにnullが返されます。だからと
#generic api form controller App\Controller\Api\ApiFormController: calls: - [setDependencies, ['@request_stack', '@App\Service\Serialization\Serializer']]
:すべてのコントローラはので、私はこのように、この定義をオーバーライドするサービスとして登録され、デフォルトではどのように私は全部を設定するのです?:symfonyでは今
私はセッター注入を使用していることがわかります。
私は他のクラスのクラスの上に拡張します。それをPostControllerと呼んでみましょう。だから、:
<?php
namespace App\Controller\Api;
use Symfony\Component\HttpFoundation\RequestStack;
class ApiFormController
{
/**
* @var Request
*/
public $request;
/**
* @param RequestStack $requestStack
*/
public function setDependencies(
RequestStack $requestStack
) {
$this->request = $requestStack;
}
}
そして今のPostController:私はこのようなアクセスを得るために期待していたと私は、このオブジェクトへのアクセスを持っていない理由を私は理解して考える
public function get(int $post = null)
{
dump($this->request); exit;
}
。私はこの目標を可能な限りクリーンな方法で達成する方法をいくつか考えています。私は準備ができた答えを期待していないが、ヒント。
イベントをバックグラウンドで設定することを考えていましたか? 私はサービスとしてコントローラを接続する方法とは関係があるとも思っています。
私はあなたの質問を取得しない - 'PostController'と'との間の接続がどこにありますかApiFormController' - それはサブクラスですか?なぜあなたはそれのために定義されたサービスを持っていないのですか?そして、YMLの呼び出し定義に2つのパラメータが含まれているのはなぜですか?しかし、このメソッドはそのうちの1つのみを使用していますか? –
最後の質問から始めましょう。もっと明確にするためにいくつかのコードを削除しました。私はこの他のサービスを削除することを忘れてしまった。これは問題ではありません。あなたが言及したように、PostControllerはApiFormControllerを拡張しています(最初の2つの文章で言及されています)。 "なぜあなたはそれのために定義されたサービスを持っていないのですか?" - 何のために?全体の機能性は?アイデアは私が拡張できるコントローラーを持つことであり、そのコントローラーは必要なすべてのサービスを注入することになります。それは、デフォルトで私の要求を処理します。それ以上の説明が必要ですか? – Robert
親クラスのみにサービス定義があり、サブクラスには定義されていない場合、サービス定義は親クラスにのみ使用されます。あなたのサブクラスにサービスを注入したいのであれば、そのサービス定義を書く必要があります。http://symfony.com/doc/current/service_container/parent_services.html –