2016-12-08 3 views
0

Мы строим REST API в Symfony и во многих контроллерах мы повторяем тот же код для синтаксического анализа и настройки свойств объектов/субъектов, таких, как это:PHP/Symfony - Синтаксический свойства объекта из запроса

$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 во время моего исследования, и я думаю, что это действительно может упростить вещи, однако, это не решает исходную задачу, которая в основном автоматизирует сам анализ. В этом случае я бы хотел вызвать библиотеку, которая автоматически проведет синтаксический анализ в методе «apply» в ExampleParamConvertor. – Mike

+1

Итак, что вы подразумеваете под «разбором»? Что он должен делать? –

+0

Что-то вроде этого интерфейса здесь. Это позволит определить, какие свойства будут переданы из запроса, и автоматически установить их в свойство, которое затем может быть проверено. https://www.dropbox.com/s/jf5jaqrqxn8r1rx/Screenshot%202016-12-07%2011.47.56.png?dl=0 – Mike

Смежные вопросы