그냥 빠른 질문입니다. 일부 API를 구축 중입니다. 폼 요청을 처리 할 간단한 부모 클래스를 만드는 것에 대해 생각하고있었습니다.Symfony 4 setter 주입 (부모 클래스)
예를 들어 양식 요청을 쉽게 처리하고 싶다면이 클래스를 확장하면 요청 개체에 액세스하고 해당 개체에서 추출한 데이터를 요청할 수 있으며 즉시 사용할 수있는 여러 가지 방법이 있습니다. 정확히 무엇이 무엇이며 왜 그렇게 중요하지 않습니다.
문제는 :
- 내가 우체부를 통해 요청을 보냅니다.
- 부모 클래스를 확장하는 클래스에서 요청 개체를 사용하려고하지만 요청 대신 null이 반환됩니다. 당신 그래서
#generic api form controller App\Controller\Api\ApiFormController: calls: - [setDependencies, ['@request_stack', '@App\Service\Serialization\Serializer']]
:
어떻게 내가 이런이 정의를 오버라이드 (override) 전부? 지금
모든 컨트롤러가 서비스로 등록 디폴트로 심포니에서 설정합니까 나는 setter 주입을 사용하고 있음을 볼 수있다.
나는 다른 클래스의 클래스를 확장합니다. 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;
}
. 나는 가능한 한 가장 깨끗한 방법으로 어떻게이 목표를 달성 할 수 있었는지 몇 가지 아이디어를 찾고 있습니다. 나는 준비된 해답을 기대하지는 않지만 암시입니다.
백그라운드에서 이벤트를 설정하는 것에 대해 생각하고 있었습니까? 또한 컨트롤러가 서비스로 연결되는 방식과 관련이 있다고 생각합니다.
내가 질문을하지 않습니다
가장 쉬운 방법은 예를 들어 다음과 같은 방식으로 작동 할 수 있도록,이에 대한
parent
키워드를 사용하는 것입니다 ApiFormController' - 하위 클래스입니까? 왜 서비스를 정의하지 않았습니까? 그리고 왜 YML의 호출 정의에는 두 개의 매개 변수가 포함되어 있지만이 중 하나만 사용합니다. –마지막 질문부터 시작하겠습니다. 더 명확하게하기 위해 일부 코드를 제거했습니다. 방금이 다른 서비스를 삭제하는 것을 잊었습니다. 이것은 중요하지 않습니다. 언급 한 Connection은 PostController가 ApiFormController (문장의 처음 몇에서 언급 한 아이디어)를 확장한다는 것입니다. "왜 서비스를 정의하지 않았습니까?" - 정확히 무엇 때문에? 전체 기능? 그 아이디어는 내가 확장 할 수있는 컨트롤러와 컨트롤러가 필요한 모든 서비스를 주입하는 것입니다. 기본적으로 내 요청을 처리합니다. 더 자세한 설명이 필요합니까? – Robert
상위 클래스에만 서비스 정의가 있지만 하위 클래스에없는 경우 서비스 정의는 상위 클래스에만 사용됩니다. 하위 클래스에 서비스를 주입하려면 서비스 정의를 작성해야합니다. http://symfony.com/doc/current/service_container/parent_services.html –