popov / maker-generator-bundle
此包为 Symfony 4 及以上版本恢复生成包代码的支持
Requires
- symfony/console: ~4.0|~5.0
- symfony/framework-bundle: ~4.0|~5.0
- symfony/process: ~4.0|~5.0
- symfony/yaml: ~4.0|~5.0
- twig/twig: ^1.28.2|^2.0|^3.0
Requires (Dev)
- doctrine/orm: ~2.4
- symfony/doctrine-bridge: ~4.0|~5.0
- symfony/filesystem: ~4.0|~5.0
- symfony/maker-bundle: ^1.20
- symfony/phpunit-bridge: ^3.3
This package is auto-updated.
Last update: 2024-08-29 05:31:09 UTC
README
此包为 Symfony 4 及以上版本恢复生成包代码的可能性。它还支持由 Symfony Flex 创建的新无包目录结构。
MakerGeneratorBundle
通过提供所有 make:*
命令的新 --namespace
选项以及用于生成代码骨架(如包或基于 Doctrine 2 模式的 CRUD 操作)的新交互式和直观命令,增强了 MakerBundle
。大部分代码都采用了旧的知名 SensioGeneratorBundle
。这些代码生成器提供的样板代码将为您节省大量时间和工作量。
安装
步骤 1:下载包
打开命令行控制台,进入您的项目目录,并执行以下命令以下载此包的最新稳定版本
$ composer require popov/maker-generator-bundle
步骤 2:启用包
然后,通过将其添加到项目的 config/bundles.php
文件中注册的包列表来启用包,以在 dev
环境中使用
// config/bundles.php return [ // ... Popov\MakerGeneratorBundle\PopovMakerGeneratorBundle::class => ['dev' => true], ];
可用命令列表
此包提供的所有命令都可以在交互式或非交互式模式下运行。交互式模式会询问您一些问题,以配置实际生成代码的命令参数。
阅读以下文章以了解如何使用新命令
生成新的包骨架
基本用法
$ php bin/console make:bundle --namespace=App/BlogBundle
生成新的操作
基本用法 @todo
其他嵌入式命令
从官方文档:此包在 make: 命名空间下提供了一些命令。执行此命令以列出所有命令
$ php bin/console list make
make:command Creates a new console command class
make:controller Creates a new controller class
make:entity Creates a new Doctrine entity class
[...]
make:validator Creates a new validator and constraint class
make:voter Creates a new security voter class
命令名称一目了然,但其中一些包括可选参数和选项。使用 --help
选项查看它们
php bin/console make:controller --help
使用策略
默认策略
默认情况下,Symfony 4 及以上版本在 App
命名空间下提供无包结构。因此,您的所有代码都只有 App
命名空间。如果您想更改命名空间,请阅读下一章。
通过最少的努力,在标准的 Symfony 配置中,您只需向命令添加 --namespace
选项即可获取格式良好的代码。
请注意,此方法不会为您创建真正的包,而只是创建类似包的目录结构。这有一些好处,因为您不需要创建额外的包配置文件,除非您想将其发布到 Packages 等。
无论如何,您可以在任何时刻添加所需的配置文件,并通过从标准的 Symfony 方法复制粘贴和重新构建文件来获取真正的包。
运行下一个命令后,新的实体将在 src/
目录中生成,命名空间为 App\BlogBundle\Entity\Post
$ php bin/console make:entity Post --namespace=App/BlogBundle
DI 配置
将以下配置添加到 config/services.yaml
。这告诉 Symfony 使 src/App/BlogBundle
中的类可用于作为服务使用。它为每个类创建一个服务,其 ID 为完全限定的类名。
注意:您必须为每个新命名空间添加此配置。如果您使用基于包的结构,则将其添加到包配置中。
# config/services.yaml services: # ... # makes classes in src/ available to be used as services # this creates a service per class whose id is the fully-qualified class name App\BlogBundle\: resource: '../src/App/BlogBundle/*' exclude: '../src/App/BlogBundle/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}' # controllers are imported separately to make sure services can be injected # as action arguments even if you don't extend any base controller class App\BlogBundle\Controller\: resource: '../src/App/BlogBundle/Controller' tags: ['controller.service_arguments']
包策略
包结构允许将相关的代码组织在某个目录下。您不需要滚动查看几十个甚至几千个文件来查找所需的内容。这种方法使代码更易于阅读和理解。
这种方法和之前的方法一样有效,但是在使用 make:*
命令创建任何类之前,你必须生成包结构
$ php bin/console make:bundle --namespace=App/BlogBundle
修改默认命名空间
在某些情况下,你可能不想使用默认的 App
命名空间,而是想使用你自己的命名空间或你公司的命名空间,那么你必须将以下文件中的 App\Kernel
命名空间更改为其他名称
src/Kernel.php
public/index.php
bin/console
覆盖骨架模板
所有生成器都使用模板骨架来生成文件。默认情况下,命令使用在 Resources/skeleton/
目录下提供的模板。
你可以在以下位置创建相同的目录和文件结构来自定义骨架模板(从高到低优先级显示)
<BUNDLE_PATH>/Resources/MakerGeneratorBundle/skeleton/
resources/MakerGeneratorBundle/skeleton/
<BUNDLE_PATH>
的值指的是你正在为其构建动作或 CRUD 后端的包的基础路径。
例如,如果你想覆盖 CRUD 生成器的 edit
模板,在 resources/MakerGeneratorBundle/skeleton/
下创建一个 crud/views/edit.html.twig.twig
文件。
在覆盖模板时,查看默认模板以了解更多关于可用的模板、它们的路径以及它们可以访问的变量。
你不必复制/粘贴原始模板来创建自己的模板,也可以扩展它,并仅覆盖相关的部分
{# resources/MakerGeneratorBundle/skeleton/crud/actions/create.php.twig #} {# notice the "skeleton" prefix here -- more about it below #} {% extends "skeleton/crud/actions/create.php.twig" %} {% block phpdoc_header %} {{ parent() }} * * This is going to be inserted after the phpdoc title * but before the annotations. {% endblock phpdoc_header %}
默认骨架中的复杂模板被拆分为 Twig 块,以便易于继承,并避免复制/粘贴大量代码。
在某些情况下,骨架中的模板包含其他模板,例如 crud/views/edit.html.twig.twig
模板
{{ include('crud/views/others/record_actions.html.twig.twig') }}
如果你为这个模板定义了自定义模板,它将代替默认模板。但是,你可以通过在路径前加上 skeleton/
来显式包含原始骨架模板,就像我们上面做的那样
{{ include('skeleton/crud/views/others/record_actions.html.twig.twig') }}
你可以在官方的 Twig 文档 中了解更多关于这个有趣的“技巧”。