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
pkg:composer/mvrhov/view-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-10-22 21:51:57 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.phppublic 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); } }