solidworx / simple-response-bundle
A Symfony bundle to return simple reponses in your controllers
Installs: 19
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=7.4
- symfony/framework-bundle: ^4.0 || ^5.0
- symfony/http-foundation: ^4.0 || ^5.0
- twig/twig: ^2.0 || ^3.0
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-10-29 05:10:44 UTC
README
SimpleResponseBundle is a bundle for the Symfony framework which allows you to return customised response classes in your controllers/actions which reduces the amount of dependencies you controller or action needs.
Installation
To install the bundle using composer, run the following command:
$ composer require solidworx/simple-response-handler
After you have installed the bundle, then you need to register the bundle in your application
<?php class AppKernel extends Kernel { public function registerBundles() { $bundles = [ ... new SolidWorx\SimpleResponseBundle\SimpleResponseBundle(), ... ]; ... } }
Usage
This bundle comes with some pre-defined handlers:
- TemplateResponse
- RouteRedirectResponse
TemplateResponse
The TemplateResponse
class will render a template based on the arguments to the class.
To render a template, just return an instance of the TemplateResponse
class in your route action:
<?php // src/AppBundle/Action/MyAction.php use SolidWorx\SimpleResponseBundle\Response\TemplateResponse; class MyAction { public function __invoke() { return new TemplateResponse('index.html.twig'); } }
When loading this action, the index.html.twig
template will automatically be rendered without the need to include twig as a dependency in your action class.
RouteRedirectResponse
The RouteRedirectResponse
class will redirect to a given route name.
<?php // src/AppBundle/Action/MyAction.php use SolidWorx\SimpleResponseBundle\Response\RouteRedirectResponse; class MyAction { public function __invoke() { return new RouteRedirectResponse('_some_route_name'); } }
When loading this action, the page will redirect to the _some_route_name
route without the need to include the router in your action or generate the URL.
Registering custom handlers
To register a custom handler, you need to create a new service that has the response_handler.handler
tag.
This class needs to implement the SolidWorx\SimpleResponseBundle\ResponseHandlerInterface
interface
services: My\Custom\Handler: arguments: ['@doctrine.orm.entity_manager'] tags: ['solidworx.response_handler']
You then need to create a class that will be used as the return value in your action
<?php use Symfony\Component\HttpFoundation\JsonResponse; class DoctrineEntityResponse extends JsonResponse { private $entity; public function __construct(string $entity) { $this->entity = $entity; parent::__construct(); } public function getEntity(): string { return $this->entity; } }
Your handler class will add the logic to return a response object;
<?php use SolidWorx\SimpleResponseBundle\ResponseHandlerInterface; use Symfony\Component\HttpFoundation\Response; class Handler implements ResponseHandlerInterface { private $em; public function __construct($entityManager) { $this->em = $entityManager; } public function supports(Response $object): bool { return $object instanceof DoctrineEntityReponse; // Only support responses of this type } public function handle(Response $object): Response { return $object->setData($this->em->getRepository($object->getEntity())->findAll()); // Return all records in the entity as a JSON response } }
Then you can use your new class in your action:
<?php // src/AppBundle/Action/MyAction.php class MyAction { public function __invoke() { return new DoctrineEntityResponse(\App\Entity\Order::class); // Pass the Order entity which will return all orders in a JSON response } }