kunicmarko / sonata-auto-configure-bundle
Symfony Bundle 用于自动配置 Sonata Admin。
Requires
- php: ^7.1
- doctrine/annotations: ^1.6
- doctrine/inflector: ^1.3
- sonata-project/admin-bundle: ^3.35
- symfony/config: ^3.4 || ^4.0 || ^4.1
- symfony/dependency-injection: ^3.4 || ^4.0 || ^4.1
- symfony/http-kernel: ^3.4 || ^4.0 || ^4.1
Requires (Dev)
- behat/behat: ^3.5
- behat/mink: 1.7.x-dev
- behat/mink-browserkit-driver: ^1.3
- behat/mink-extension: ^2.3
- behat/mink-goutte-driver: ^1.2
- behat/mink-selenium2-driver: ^1.3
- behat/symfony2-extension: ^2.1
- doctrine/doctrine-fixtures-bundle: ^3.0
- matthiasnoback/symfony-dependency-injection-test: ^3.0
- sonata-project/doctrine-orm-admin-bundle: ^3.6
- symfony/phpunit-bridge: ^4.0
README
尝试自动配置您的管理类和扩展,因此您无需手动配置。
文档
安装
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 { }