Few helper traits for quicker API development in Symfony
- controller helper method for JSON data sent in
POST,PUTorPATCHrequest content - generally speaking, sending JSON content is more flexible than forms, for CRUD with JS frameworks.
public function create(Request $request)
{
$entity = new Entity();
$this->handleJSONForm($request, $entity, EntityType::class, $options = [], $clearMissingFields = true);
// persist and flush $entitypublic function edit(Request $request,Entity $entity)
{
$this->handleJSONForm($request, $entity, EntityType::class, $options = [], $clearMissingFields = true);
// flush entity- controller helper method for traditional form data in
GETorPOST - I advice using traditional form data only when JSON is out of place (i.e.
GETparams)
public function example(Request $request)
{
$domain = new Domain();
if ($request->query->count() > 0)
{
$this->handleForm($request, $params, DomainType::class, $options = [], $clearMissingFields = true);
}
// do something with $domain- controller helper method to validate a single file upload
- a lightweight alternative to a File constraint, when you need just one file, not the whole form
public function uploadImage(Request $request)
{
$file = $this->handleUpload($request, 'image');
// do something with $file
}Since all handle* methods in this trait throw a Nebkam\SymfonyTraits\ValidationException, you have to catch it, either via try {..} catch in the controller or via global exception listener.
To ease this, this package includes a sample exception listener, which returns validation errors in JSON. You just have to register it as a service:
Nebkam\SymfonyTraits\EventListener\ValidationExceptionListener:
tags:
- { name: kernel.event_listener, event: kernel.exception }