neighborhoods / buphalo
制造模式。
Requires
- php: ^7.2 || ^8.0
- ext-json: *
- ext-mbstring: *
- symfony/config: ^4.2
- symfony/dependency-injection: ^4.2
- symfony/expression-language: ^4.2
- symfony/filesystem: ^4.2
- symfony/finder: ^4.4.30
- symfony/yaml: ^4.2
- dev-master
- 142.x-dev
- 2.0.0
- 2.0.0-alpha
- 1.x-dev
- 1.6.1
- 1.6.0
- 1.5.0
- 1.5.0-alpha.1
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 1.0.0-RC7
- 1.0.0-RC6
- 1.0.0-RC5
- 1.0.0-RC4
- 1.0.0-RC3
- 1.0.0-RC2
- 1.0.0-RC1
- 1.0.0-beta9
- 1.0.0-beta8
- dev-BUPH-146-source-override-behavior-1x
- dev-BUPH-143-fabrication-file-writer
- dev-feature/BUPH-87
- dev-move-tokenizer-rules-to-di
- dev-BUPH-88-static-analysis
- dev-BUPH-92-single-line-annotations
- dev-BRADFAB-11-upgrade-script-master-2
- dev-BRADFAB-11-upgrade-script-master
- dev-BRADFAB-11-upgrade-script
- dev-docker-1.x
- dev-docker
- dev-1.x-symfony-filesystem-downgrade
- dev-lazy-regex
- dev-add-handler
- dev-service-file-example-update
- dev-jpmarcotte-patch-1
This package is auto-updated.
Last update: 2024-09-07 03:52:43 UTC
README
制造模式。
我们从别人那里偷来的好东西。坏的东西是我们自己的。
目录
摘要
本文件试图描述如何使用 Buphalo 的公共 API。此外,它试图提供一些对 Buphalo 尝试解决的问题及其动机的见解。如果本文件中没有描述,则不被视为公共 API,并可能在任何任意版本中更改,即您不应该依赖于它。
问题
模式是特定上下文中的问题解决方案。实现良好的模式可能变得繁琐且耗时,这阻碍了其实现,转而采用设计不佳但开发速度较快的模式。
解决方案
使用易于更改的代码生成工具,生成良好的模式,以便开发速度与设计不佳的模式相当或更快。
入门指南
运行 Buphalo
环境变量 API
跟踪代码中使用的环境变量非常容易。Buphalo 使用 DI 组件 的环境功能将运行时选项注入容器中的对象。
Buphalo 利用环境变量 API 进行运行时选项。以下运行 Buphalo 的 shell 命令说明了当前支持的 API。
Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__SourceDirectoryPath=/PATH/TO/SOURCE/DIRECTORY \ Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__FabricationDirectoryPath=/PATH/TO/FABRICATION/DIRECTORY \ Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__NamespacePrefix=VENDOR\\PRODUCT\\ \ Neighborhoods_Buphalo_V1_TemplateTree_Map_Builder_FactoryInterface__TemplateTreeDirectoryPaths=TreeName:/PATH/TO/TEMPLATE/TREE/DIRECTORY \ php bin/v1/buphalo
例如,为了运行 Buphalo(假设 Buphalo 已安装为 composer 依赖项),请在您的产品根目录中执行以下 shell 命令。
Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__SourceDirectoryPath=$PWD/vendor/neighborhoods/buphalo/src/v1 \ Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__FabricationDirectoryPath=$PWD/vendor/neighborhoods/buphalo/fab/v1 \ Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__NamespacePrefix=Neighborhoods\\Buphalo\\ \ Neighborhoods_Buphalo_V1_TemplateTree_Map_Builder_FactoryInterface__TemplateTreeDirectoryPaths=buphalo:$PWD/vendor/neighborhoods/buphalo/template-tree/V1 \ php vendor/bin/v1/buphalo
过滤
Buphalo 还允许您通过
Neighborhoods_Buphalo_V1_FabricationFile_Map_BuilderInterface__FinderFileNames
环境变量指定任何数量的特定过滤规则。作为环境变量,这是“类型”为 CSV。然后由 DI 组件 转换为数组,并最终注入到 Finder 组件的 \Symfony\Component\Finder\Finder::name
中。适用于 \Symfony\Component\Finder\Finder::name
的任何规则都适用于此处。
Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__SourceDirectoryPath=$PWD/vendor/neighborhoods/buphalo/src/v1 \ Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__FabricationDirectoryPath=$PWD/vendor/neighborhoods/buphalo/fab/v1 \ Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__NamespacePrefix=Neighborhoods\\Buphalo\\ \ Neighborhoods_Buphalo_V1_TemplateTree_Map_Builder_FactoryInterface__TemplateTreeDirectoryPaths=buphalo:$PWD/vendor/neighborhoods/buphalo/template-tree/V1 \ Neighborhoods_Buphalo_V1_FabricationFile_Map_BuilderInterface__FinderFileNames=Connection.buphalo.v1.fabrication.yml,Connection2.buphalo.v1.fabrication.yml php vendor/bin/v1/buphalo
示例制造文件
# This lives in /PATH/TO/SOFTWARE_PRODUCT_ROOT/src/V2/Toe.buphalo.v1.fabrication.yml # I WANT ALL THE ACTORS! actors: <PrimaryActorName>.php: template: PrimaryActorName.php <PrimaryActorName>.service.yml: template: PrimaryActorName.service.yml <PrimaryActorName>Interface.php: template: PrimaryActorNameInterface.php <PrimaryActorName>/AwareTrait.php: template: PrimaryActorName/AwareTrait.php <PrimaryActorName>/Factory.php: template: PrimaryActorName/Factory.php <PrimaryActorName>/Factory.service.yml: template: PrimaryActorName/Factory.service.yml <PrimaryActorName>/FactoryInterface.php: template: PrimaryActorName/FactoryInterface.php <PrimaryActorName>/Factory/AwareTrait.php: template: PrimaryActorName/Factory/AwareTrait.php <PrimaryActorName>/Builder.php: template: PrimaryActorName/Builder.php <PrimaryActorName>/Builder.service.yml: template: PrimaryActorName/Builder.service.yml <PrimaryActorName>/BuilderInterface.php: template: PrimaryActorName/BuilderInterface.php <PrimaryActorName>/Builder/AwareTrait.php: template: PrimaryActorName/Builder/AwareTrait.php <PrimaryActorName>/Builder/Factory.php: template: PrimaryActorName/Builder/Factory.php <PrimaryActorName>/Builder/Factory.service.yml: template: PrimaryActorName/Builder/Factory.service.yml <PrimaryActorName>/Builder/FactoryInterface.php: template: PrimaryActorName/Builder/FactoryInterface.php <PrimaryActorName>/Builder/Factory/AwareTrait.php: template: PrimaryActorName/Builder/Factory/AwareTrait.php <PrimaryActorName>/Repository.php: template: PrimaryActorName/Repository.php <PrimaryActorName>/Repository.service.yml: template: PrimaryActorName/Repository.service.yml <PrimaryActorName>/RepositoryInterface.php: template: PrimaryActorName/RepositoryInterface.php <PrimaryActorName>/Repository/AwareTrait.php: template: PrimaryActorName/Repository/AwareTrait.php <PrimaryActorName>/Map.php: template: PrimaryActorName/Map.php <PrimaryActorName>/Map.service.yml: template: PrimaryActorName/Map.service.yml <PrimaryActorName>/MapInterface.php: template: PrimaryActorName/MapInterface.php <PrimaryActorName>/Map/AwareTrait.php: template: PrimaryActorName/Map/AwareTrait.php <PrimaryActorName>/Map/Factory.php: template: PrimaryActorName/Map/Factory.php <PrimaryActorName>/Map/Factory.service.yml: template: PrimaryActorName/Map/Factory.service.yml <PrimaryActorName>/Map/FactoryInterface.php: template: PrimaryActorName/Map/FactoryInterface.php <PrimaryActorName>/Map/Factory/AwareTrait.php: template: PrimaryActorName/Map/Factory/AwareTrait.php <PrimaryActorName>/Map/Builder.php: template: PrimaryActorName/Map/Builder.php <PrimaryActorName>/Map/Builder.service.yml: template: PrimaryActorName/Map/Builder.service.yml <PrimaryActorName>/Map/BuilderInterface.php: template: PrimaryActorName/Map/BuilderInterface.php <PrimaryActorName>/Map/Builder/AwareTrait.php: template: PrimaryActorName/Map/Builder/AwareTrait.php <PrimaryActorName>/Map/Builder/Factory.php: template: PrimaryActorName/Map/Builder/Factory.php <PrimaryActorName>/Map/Builder/Factory.service.yml: template: PrimaryActorName/Map/Builder/Factory.service.yml <PrimaryActorName>/Map/Builder/FactoryInterface.php: template: PrimaryActorName/Map/Builder/FactoryInterface.php <PrimaryActorName>/Map/Builder/Factory/AwareTrait.php: template: PrimaryActorName/Map/Builder/Factory/AwareTrait.php
# This lives in /PATH/TO/SOFTWARE_PRODUCT_ROOT/src/V2/Toe/Nail.buphalo.v1.fabrication.yml # I only want SOME actors! actors: <PrimaryActorName>.php: template: PrimaryActorName.php <PrimaryActorName>.service.yml: template: PrimaryActorName.service.yml <PrimaryActorName>Interface.php: template: PrimaryActorNameInterface.php <PrimaryActorName>/AwareTrait.php: template: PrimaryActorName/AwareTrait.php <PrimaryActorName>/Factory.php: template: PrimaryActorName/Factory.php <PrimaryActorName>/Factory.service.yml: template: PrimaryActorName/Factory.service.yml <PrimaryActorName>/FactoryInterface.php: template: PrimaryActorName/FactoryInterface.php <PrimaryActorName>/Factory/AwareTrait.php: template: PrimaryActorName/Factory/AwareTrait.php <PrimaryActorName>/Builder.php: template: PrimaryActorName/Builder.php <PrimaryActorName>/Builder.service.yml: template: PrimaryActorName/Builder.service.yml <PrimaryActorName>/BuilderInterface.php: template: PrimaryActorName/BuilderInterface.php <PrimaryActorName>/Builder/AwareTrait.php: template: PrimaryActorName/Builder/AwareTrait.php <PrimaryActorName>/Builder/Factory.php: template: PrimaryActorName/Builder/Factory.php <PrimaryActorName>/Builder/Factory.service.yml: template: PrimaryActorName/Builder/Factory.service.yml <PrimaryActorName>/Builder/FactoryInterface.php: template: PrimaryActorName/Builder/FactoryInterface.php <PrimaryActorName>/Builder/Factory/AwareTrait.php: template: PrimaryActorName/Builder/Factory/AwareTrait.php
关闭演员的制造
- 一开始就不包括演员条目在制造文件中。
- 从制造文件中删除演员条目。
- 从制造文件中注释掉演员条目。
- 包括在
Neighborhoods_Buphalo_V1_TargetApplication_BuilderInterface__SourceDirectoryPath
指示的路径中引用的等效文件- Buphalo 不会在源目录路径中已存在的文件中制造文件,因为它们的想法是它们将优于制造的文件。
添加新模板或更新现有模板
- 如果您还没有这样做,请将 Buphalo 的
template-tree
目录复制到您的软件产品根目录。 - 在您的
template-tree/v1
目录下适当位置添加或更改相应的 PHP 和依赖注入服务定义 YAML 文件。 - 请确保更新您的环境变量到以下(或您复制目录使用不同路径的等效项)
Neighborhoods_Buphalo_V1_TemplateTree_Map_Builder_FactoryInterface__TemplateTreeDirectoryPaths=TreeName:/PATH/TO/SOFTWARE_PRODUCT/ROOT/template-tree/v1 \
使用多个模板树
- Buphalo 支持使用多个模板树。
- 如果使用多个树,每个模板树必须通过在目录路径中包含“TreeName:”前缀来命名。
- 如果使用单个模板树,模板树标识符可以选择不命名。
- 使用逗号分隔每个路径标识符。
- Buphalo将按指定顺序尝试查看模板树目录,并使用它找到的第一个匹配的模板。
- 示例
Neighborhoods_Buphalo_V1_TemplateTree_Map_Builder_FactoryInterface__TemplateTreeDirectoryPaths=primary:/PATH/TO/SOFTWARE_PRODUCT/ROOT/template-tree/primary,secondary:/PATH/TO/SOFTWARE_PRODUCT/ROOT/template-tree/secondary \
定义
制造文件
- 制造文件包含制造Fablet的说明。
- Fablet的主要行为者通过制造文件文件名识别,以及Fabrication File在其所在目录结构中的位置。
<PrimaryActorName>
令牌是对不带扩展名的制造文件名的别名,也是主要行为者的名称。- 在示例制造文件部分,一个Fablet是
Toe
,另一个Fablet是Toe\Nail
。 - Fablet行为者可以是任何东西。
Fablet
(来源 Mucha)
- Fablet是从制造文件构建的行为者集合。
- 主要行为者是与不带扩展名的制造文件名相同的类。
- 这个集合包含主要行为者和/或任何数量的支持行为者。
功能
自动加载
- 请确保更新您的
composer.json
以回退到fab
目录,例如。"autoload": { "psr-4": { "VENDOR\\PRODUCT\\": [ "src", "fab" ] } }
- 为了高效,Buphalo将只制造在
src
中不存在的文件,因为src
中的任何内容都将覆盖fab
中的内容。
注解处理器
注解处理器(AP)是可选的配置工具,允许用户定义动态模板内容。
有关更多信息,请参阅AnnotationProcessors。