mvrhov / view-bundle
mvrhov view bundle
Installs: 19
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=7.0
- symfony/framework-bundle: ^3.4|^4.0
- twig/twig: ^1.34|^2.4
This package is auto-updated.
Last update: 2025-04-22 20:52:35 UTC
README
View bundle for Symfony
This bundle adds two View classes that you can return from your controller's action RouteView
, TemplateView
and
an interface ResponderInterface
which the class you are returning from the controller should implement.
Installation
-
Require View bundle as a dependency using Composer:
php composer.phar require mvrhov/view-bundle
-
Add bundle to
app/AppKernel.php
public function registerBundles() { return array( new \mvrhov\ViewBundle\mvrhovViewBundle(); // ... ); }
-
You are done.
Examples
RouteView
use mvrhov\ViewBundle\View\RouteView; use mvrhov\ViewBundle\View\ViewInterface; final class RouteAction { public function __invoke(): ViewInterface { $params = [ 'param1' => 'view', 'param2' => 'bundle', ]; return new RouteView('my_route', $params); } }
TemplateView
use mvrhov\ViewBundle\View\TemplateView; use mvrhov\ViewBundle\View\ViewInterface; final class TemplateAction { public function __invoke(): ViewInterface { $data = [ 'foo' => 1, 'bar' => 'yep' ]; return new TemplateView('@Bundle/template.html.twig', $data); } }
Responder
use mvrhov\ViewBundle\View\ResponderInterface; use mvrhov\ViewBundle\View\TemplateView; use mvrhov\ViewBundle\View\RouteView; use mvrhov\ViewBundle\View\ResponseView; final class InvoiceResponder implements ResponderInterface; { private $invoices; public function __construct(array $invoices) { $this->invoices = $invoices; } public function getView(Request $request, int $requestType): ViewInterface { if ('application/json' !== $request->getContentType()) { $total = count($this->invoices); if (0 === $total) { return new RouteView('list_invoices'); } if (1 === $total) { return new TemplateView('@Bundle/template_one.html.twig', $this->invoices); } if (5 > $total) { return new TemplateView('@Bundle/template_a_lot.html.twig', $this->invoices); } } else { return new ResponseView(new Response(json_serialize($this->invoices))); } } } use mvrhov\ViewBundle\View\TemplateView; use mvrhov\ViewBundle\View\ResponderInterface; final class ResponderAction { public function __invoke(): ResponderInterface { $invoices = $this->getInvoices(); return new InvoiceResponder($invoices); } }