2017 © Pedro Peláez
 

library view-model-bundle

A Symfony2 bundle to filter and organize data sent to the View from the Controller

image

gotakk/view-model-bundle

A Symfony2 bundle to filter and organize data sent to the View from the Controller

  • Friday, February 3, 2017
  • by gotakk
  • Repository
  • 2 Watchers
  • 4 Stars
  • 191 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 1 Open issues
  • 1 Versions
  • 1 % Grown

The README.md

ViewModelBundle

A Symfony2 bundle to filter and organize data sent to the View from the Controller, (*1)

Build Status Coverage Status Scrutinizer Code Quality Total Downloads License
SensioLabsInsight, (*2)

Installation

Step 1: Add this bundle to your project in composer.json

$ composer require gotakk/view-model-bundle

Step 2: Enable the bundle to your app/AppKernel.php

// app/AppKernel.php

public function registerBundles()
{
  return array(
    // ...
    new gotakk\ViewModelBundle\gotakkViewModelBundle(),
    // ...
  );
}

Step 3: Create your ViewModel folder structure

  • Create a ViewModel folder in your bundle root
  • Inside the ViewModel folder create subfolders to organize your files. The convention is to create a subfolder per each controller file.
  • In these subfolders, create one ViewModelAssembler file per action.

Example of ViewModel structure in your project, (*3)

src/Acme/FooBarBundle
|
|
|-- Controller
|   |-- CorporateController.php               # <- contactAction(), homeAction()
|   `-- TravelController.php                  # <- belgiumAction(), franceAction()
|
...
|
`-- ViewModel
    |-- Corporate
    |   |-- ContactViewModelAssembler.php
    |   `-- HomeViewModelAssembler.php
    `-- Travel
        |-- BelgiumViewModelAssembler.php
        `-- FranceViewModelAssembler.php

Step 4: Create your Assembler!

<?php
// src/Acme/FooBarBundle/ViewModel/Corporate/ContactViewModelAssembler.php

namespace Acme\FooBarBundle\ViewModel\Corporate;

use gotakk\ViewModelBundle\ViewModel\ViewModelAssembler;

use Acme\FooBarBundle\Entity\Model1;
use Acme\FooBarBundle\Entity\Model2;
use Acme\FooBarBundle\Entity\Model3;

class ContactViewModelAssembler extends ViewModelAssembler
{
  public function __construct()
  {
    $this->skel = array(
      'pageTitle',
      'mails' => array(),
    );
  }

  public function generateViewModel($model1, $model2, $model3)
  {
    $vm = $this->vmService->createViewModel();

    $vm->setPageTitle('Contact Us');
    $vm->addMail('abc@gmail.com');
    $vm->addMail('def@gmail.com');

    return $vm->toArray();
  }
}

Step 5: Declare your assembler as a service.

# src/Acme/FooBarBundle/Resouces/config/services.yml

services:
    acme_foobar.contact_view_model_assembler:
        class: Acme\FooBarBundle\ViewModel\Corporate\ContactViewModelAssembler
    parent: gotakk.view_model.view_model_assembler

Step 6: Use your assembler in your controler

// src/Acme/FooBarBundle/Controller/CorporateController.php

namespace Acme\FooBarBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class MainController extends Controller
{
    /**
     * @Template
     */
    public function landingAction(Request $request)
    {
        $model1 = $this->get('doctrine')->getManager()->getRepository('AcmeFooBarBundleBundle:Model1')->findAll();
        $model2 = $this->get('doctrine')->getManager()->getRepository('AcmeFooBarBundleBundle:Model2')->findAll();
        $model3 = $this->get('doctrine')->getManager()->getRepository('AcmeFooBarBundleBundle:Model3')->findAll();

        $vm = $this->get('acme_foobar.contact_view_model_assembler')->generateViewModel($model1, $model2, $model3);

        return array(
            'vm' => $vm,
        );
    }

That's it!, (*4)

License

ViewModelBundle is licensed under the MIT license (see LICENSE.md file)., (*5)

Authors

Thanks to * Remiii, (*6)

The Versions

03/02 2017

dev-master

9999999-dev https://github.com/gotakk/ViewModelBundle

A Symfony2 bundle to filter and organize data sent to the View from the Controller

  Sources   Download

MIT

The Requires

 

The Development Requires

by Adam Tahri

filter bundle model symfony view view-model viewmodel oganize