knplabs / controller-behaviors
基于特征的 Symfony2 控制器
Requires
- php: >=5.4.0
- symfony/http-foundation: ~2.1
Requires (Dev)
- doctrine/doctrine-bundle: *
- doctrine/mongodb-odm-bundle: *
- doctrine/orm: *
- knplabs/knp-components: dev-master
- phpspec/phpspec2: 1.0.*
- propel/propel1: dev-master
- symfony/form: *
- symfony/framework-bundle: 2.1.*
- symfony/validator: *
This package is not auto-updated.
Last update: 2022-02-01 12:21:46 UTC
README
此php 5.4+ 库是 traits 的集合,它为 Symfony2 控制器添加行为。
它目前处理
使用
您只需定义一个控制器并使用一些 traits。
crudable
Crudable trait 是 ORMBehavior 和 ODMBehavior 内部使用的抽象 trait。
- 要使用 Doctrine ORM 持久化在您的 CRUD 中,只需像下面这样使用 ORMBehavior。
- 要使用 Propel ORM 持久化在您的 CRUD 中,只需使用 PropelBehavior。
<?php namespace Acme\DemoBundle\Controller; use Knp\ControllerBehaviors\Crudable\Doctrine\ORMBehavior; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class MemberController extends Controller { // make aliases of actions to make them FOSRestBundle compliant use ORMBehavior { ORMBehavior::getListResponse as getMembersAction; ORMBehavior::getShowResponse as getMemberAction; ORMBehavior::getNewResponse as newMembersAction; ORMBehavior::getEditResponse as editMemberAction; ORMBehavior::getCreateResponse as postMembersAction; ORMBehavior::getUpdateResponse as putMemberAction; ORMBehavior::getDeleteResponse as deleteMemberAction; } }
表单
Crudable 的创建、编辑和更新操作
将在束的 Form
文件夹中搜索 <Object>Type
。
在下面的示例中,它将在 src/Acme/DemoBundle/Form/MemberType
中。
要修改此行为,只需覆盖 trait 的默认实现,如下所示
<?php protected function createNewForm($object) { return $this->createForm('my_super_type_id', $object, ['some_option' => true]); }
模板
模板也使用约定进行搜索。默认情况下,它将在束的 Resources\views/<ControllerName>
文件夹中搜索。
这里的 <ControllerName>
可以包含一个子文件夹(例如,考虑一个 Admin
子文件夹)。
要修改此行为,只需覆盖 trait 的默认实现,如下所示
<?php protected function getViewsPathPrefix() { return '::'; }
可筛选
Filterable 行为是一个简单的 trait,它存储和检索给定控制器的一些信息,例如筛选表单数据。
一旦您向 postFilterMembersAction
提交数据,您可以通过使用 getFilters
方法稍后检索它。
它还提供了一种处理筛选表单的方式,其类型在本例中定义在 src/Acme/DemoBundle/Form/MemberFilterType
中。
<?php use Knp\ControllerBehaviors\FilterableBehavior; class MemberController extends Controller { // make aliases of actions to make them FOSRestBundle compliant use FilterableBehavior { FilterableBehavior::getFilterResponse as postFilterMembersAction; } }
为了使此筛选表单在视图中可见,您可以通过覆盖默认视图参数处理来修改它
<?php protected function getListViewParameters(array $parameters) { return array_merge([ 'filterForm' => $this->createFilterForm()->createView(), ], $parameters); }
可分页
Paginable 行为是一个简单的 trait,它使用 Knp paginator 来分页结果集。
<?php use Knp\ControllerBehaviors\Paginatable\KnpPaginatorBehavior; class MemberController extends Controller { use KnpPaginatorBehavior; public function getObjectsToList() { return $this->paginateQueryBuilder( $this->getObjectRepository()->getJoinAllFilteredQB($this->getFilters()) // returns an ORM Query Builder ); } }