Mike
Mike

Reputation: 6934

PHP/Symfony - Parsing object properties from Request

We're building a REST API in Symfony and in many Controllers we're repeating the same code for parsing and settings properties of objects/entities such as this:

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

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

I'm aware that Symfony forms provide this functionality, however, we've decided in the company that we want to move away from Symfony forms and want to use something simplier and more customisable instead.

Could anybody please provide any ideas or examples of libraries that might achieve property parsing and settings to an object/entity? Thank you!

Upvotes: 1

Views: 818

Answers (1)

Tomasz Madeyski
Tomasz Madeyski

Reputation: 10890

It seems like a good use case for ParamConverter. Basically it allows you, by using @ParamConverter annotation to convert params which are coming into your controller into anything you want, so you might just create ParamConverter with code which is repeated in many controllers and have it in one place. Then, when using ParamConverter your controller will receive your entity/object as a parameter.

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;
    }
}

And in controller:

/**
 * @ParamConverter("exampleParamConverter", converter="your_converter")
 */
public function action(Entity $entity)
{
    //you have your object available
}

Upvotes: 1

Related Questions