2016-12-08 5 views
0
우리는 심포니에서 REST API를 구축하고 많은 컨트롤러 우리는이 같은 개체/기관의 분석 및 설정 속성에 대한 동일한 코드를 반복하고

에서 개체 속성을 구문 분석 :PHP/심포니 - 요청

$title = $request->request->get('title'); 

if (isset($title)) { 
    $titleObj = $solution->getTitle(); 
    $titleObj->setTranslation($language, $title); 
    $solution->setTitle($titleObj); 
} 

Symfony 양식은이 기능을 제공하지만 Symfony 양식에서 벗어나 더 단순하고보다 사용자 정의가 가능한 것을 사용하기로 결정했습니다.

개체 또는 개체에 대한 속성 파싱 및 설정을 얻을 수있는 라이브러리 아이디어 나 예제를 제공해 주실 수 있습니까? 고맙습니다!

답변

1

ParamConverter의 경우에는 좋은 것으로 보입니다. 기본적으로 @ParamConverter 주석을 사용하여 컨트롤러에 들어오는 매개 변수를 원하는 것으로 변환 할 수 있으므로 많은 컨트롤러에서 반복되는 코드로 ParamConverter을 만들고 한 곳에서 사용할 수 있습니다. 그런 다음 ParamConverter을 사용하면 컨트롤러가 개체/개체를 매개 변수로받습니다.

class ExampleParamConverter implements ParamConverterInterface 
{ 

    public function apply(Request $request, ParamConverter $configuration) 
    { 
     //put any code you want here 
     $title = $request->request->get('title'); 
     if (isset($title)) { 
      $titleObj = $solution->getTitle(); 
      $titleObj->setTranslation($language, $title); 
      $solution->setTitle($titleObj); 
     } 

     //now you are setting object which will be injected into controller action 
     $request->attributes->set($configuration->getName(), $solution); 

     return true; 
    } 

    public function supports(ParamConverter $configuration) 
    { 
     return true; 
    } 
} 

그리고 컨트롤러

:

/** 
* @ParamConverter("exampleParamConverter", converter="your_converter") 
*/ 
public function action(Entity $entity) 
{ 
    //you have your object available 
} 
답변에 대한
+0

감사합니다, 나는 내 연구 중에 ParamConverter를 발견하고 난 그러나 초기 문제를 해결하지 않는, 정말 일을 단순화 할 수 있다고 생각하는 주로 파싱 자체를 자동화하고 있습니다. 이 경우 ExampleParamConvertor에서 "apply"메서드로 파싱을 자동으로 수행하는 라이브러리를 호출하고 싶습니다. – Mike

+1

"파싱"이란 정확히 무엇을 의미합니까? 그것은 무엇을하기로되어 있나? –

+0

여기에이 인터페이스와 같은 것이 있습니다. 요청에서 전달 될 속성을 정의하고이를 유효성을 검사 할 수있는 속성으로 자동 설정합니다. https://www.dropbox.com/s/jf5jaqrqxn8r1rx/Screenshot%202016-12-07%2011.47.56.png?dl=0 – Mike