定制 gotakk/view-model-bundle 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

gotakk/view-model-bundle

Composer 安装命令:

composer require gotakk/view-model-bundle

包简介

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

README 文档

README

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

Build Status Coverage Status Scrutinizer Code Quality Total Downloads License
SensioLabsInsight

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

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!

License

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

Authors

Thanks to

统计信息

  • 总下载量: 202
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 5
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 4
  • Watchers: 2
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2015-09-13