knplabs/controller-behaviors

此包已被放弃,不再维护。没有建议的替代包。

基于特征的 Symfony2 控制器

dev-master 2015-02-11 14:59 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:21:46 UTC


README

Build Status

此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
        );
    }
}