gotakk/view-model-bundle

一个用于从控制器向视图过滤和组织数据的Symfony2扩展包

dev-master 2017-02-03 01:51 UTC

This package is not auto-updated.

Last update: 2024-09-28 19:09:28 UTC


README

一个用于从控制器向视图过滤和组织数据的Symfony2扩展包

Build Status Coverage Status Scrutinizer Code Quality Total Downloads License
SensioLabsInsight

安装

步骤 1: 在composer.json中将此扩展包添加到您的项目中

$ composer require gotakk/view-model-bundle

步骤 2: 在app/AppKernel.php中启用该扩展包

// app/AppKernel.php

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

步骤 3: 创建您的ViewModel文件夹结构

  • 在扩展包根目录下创建一个ViewModel文件夹
  • 在ViewModel文件夹内创建子文件夹以组织文件。惯例是每个控制器文件创建一个子文件夹。
  • 在这些子文件夹中,为每个操作创建一个ViewModelAssembler文件。

项目中的ViewModel结构示例

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

步骤 4: 创建您的装配器!

<?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();
  }
}

步骤 5: 将您的装配器声明为服务。

# 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

步骤 6: 在您的控制器中使用您的装配器

// 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,
        );
    }

就是这样!

许可证

ViewModelBundle采用MIT许可证(请参阅LICENSE.md文件)。

作者

感谢