kunicmarko/sonata-auto-configure-bundle

此包已被弃用且不再维护。未建议替代包。

Symfony Bundle 用于自动配置 Sonata Admin。

0.7.1 2019-03-04 12:34 UTC

This package is auto-updated.

Last update: 2020-11-16 04:33:38 UTC


README

尝试自动配置您的管理类和扩展,因此您无需手动配置。

PHP Version Latest Stable Version Latest Unstable Version

Build Status Coverage Status

文档

安装

1. 使用 Composer 添加依赖项

composer require kunicmarko/sonata-auto-configure-bundle

2. 为所有 Symfony 环境启用此包

// bundles.php
return [
    //...
    KunicMarko\SonataAutoConfigureBundle\SonataAutoConfigureBundle::class => ['all' => true],
];

配置

sonata_auto_configure:
    admin:
        suffix: Admin
        manager_type: orm
        label_catalogue: ~
        label_translator_strategy: ~
        translation_domain: ~
        group: ~
        pager_type: ~
    entity:
        namespaces:
            - { namespace: App\Entity, manager_type: orm }
    controller:
        suffix: Controller
        namespaces:
            - App\Controller\Admin

工作原理

此包试图猜测有关您的管理类的某些信息。您只需创建您的管理类,并确保管理目录包含在自动发现中,并且自动配置已启用。

此包将使用 sonata.admin 标记您的管理类,然后我们找到所有管理类,如果自动配置已启用,我们将取类名。如果您在配置中定义了后缀(默认为 Admin),我们将移除它以获取实体名称,因此如果您有 CategoryAdmin,我们将得到 Category

之后,我们检查是否存在 AdminOption 注解,注解的优先级高于我们的猜测。如果没有定义注解或某些必须的值不存在,我们仍然尝试猜测。

首先,我们设置标签,根据前面的示例,它将是 Category

然后,我们设置管理代码,它将是服务 ID,在我们的例子中是类名。

之后,我们尝试在您定义的命名空间列表中找到 Category 实体(默认为 App\Entity)。如果找不到实体,将抛出异常,并且您可能需要使用注解来定义实体。您可以按命名空间设置 manager_type 属性。

默认情况下,我们将从注解中获取 manager_type,如果没有注解,则从命名空间定义中获取。如果您在注解中定义了实体但没有定义 manager_type,则我们将从包配置中获取管理类型,该配置将作为 sonata_auto_configure.admin.manager_type 参数可用。

然后我们尝试猜测控制器,与实体类似,我们在命名空间列表中尝试猜测它,但我们添加了一个后缀(在大多数情况下,人们将其命名为 CategoryController),您可以在配置中禁用它。如果没有控制器,我们将其保留为 null,sonata 将添加其默认控制器。

到此为止。我们有了定义管理类所需的所有信息,如果您在定义管理类时使用了其他标记选项,您将需要使用注解或使用 autoconfigure: false 在您自己的管理中注册,这看起来像

App\Admin\CategoryAdmin:
    arguments: [~, App\Entity\Category, ~]
    autoconfigure: false
    tags:
        - { name: sonata.admin, manager_type: orm, label: Category }
    public: true

由于您的管理员类是自动装配的,因此您仍然可以使用setter注入,但您必须添加一个@required注解。

/**
 * @required
 */
public function setSomeService(SomeService $someService)
{
    $this->someService = $someService;
}

注解

AdminOptions

<?php

namespace App\Admin;

use KunicMarko\SonataAutoConfigureBundle\Annotation as Sonata;
use App\Controller\Admin\CategoryController;
use App\Entity\Category;
use Sonata\AdminBundle\Admin\AbstractAdmin;

/**
 * @Sonata\AdminOptions(
 *     label="Category",
 *     managerType="orm",
 *     group="Category",
 *     showInDashboard=true,
 *     showMosaicButton=true,
 *     keepOpen=true,
 *     onTop=true,
 *     icon="<i class='fa fa-user'></i>",
 *     labelTranslatorStrategy="sonata.admin.label.strategy.native",
 *     labelCatalogue="App",
 *     translationDomain="messages",
 *     pagerType="simple",
 *     controller=CategoryController::class,
 *     entity=Category::class,
 *     adminCode="admin_code",
 *     autowireEntity=true,
 *     templates={
 *         "list": "admin/category/list.html.twig"
 *     },
 *     children={"app.admin.product"}
 * )
 */
final class CategoryAdmin extends AbstractAdmin
{
}

AdminExtensionOptions

<?php

namespace App\Admin;

use KunicMarko\SonataAutoConfigureBundle\Annotation as Sonata;
use Sonata\AdminBundle\Admin\AbstractAdminExtension;

/**
 * @Sonata\AdminExtensionOptions(
 *     global=true
 * )
 */
final class GlobalExtension extends AbstractAdminExtension
{
}
<?php

namespace App\Admin;

use KunicMarko\SonataAutoConfigureBundle\Annotation as Sonata;
use Sonata\AdminBundle\Admin\AbstractAdminExtension;
use App\Admin\ActivityAdmin;

/**
 * @Sonata\AdminExtensionOptions(
 *     target={"app.admin.project", ActivityAdmin::class}
 * )
 */
final class SortableExtension extends AbstractAdminExtension
{
}