gotakk / view-model-bundle
一个用于从控制器向视图过滤和组织数据的Symfony2扩展包
dev-master
2017-02-03 01:51 UTC
Requires
- php: >=5.3.3
- symfony/framework-bundle: >=2.3
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-28 19:09:28 UTC
README
一个用于从控制器向视图过滤和组织数据的Symfony2扩展包
安装
步骤 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文件)。
作者
感谢