symfony2admingenerator / twig-generator
基于 Twig 模板引擎的 PHP 代码生成器
Requires
- php: ^8.1
- twig/twig: ^2.15.3||^3.4.3
Requires (Dev)
- phpunit/phpunit: ~4.3
README
TwigGenerator 是一个基于 Twig 模板引擎的 PHP 代码生成器。它利用 Twig 模板的力量简化 PHP 代码的生成,使其更具可扩展性和可读性。
安装
使用 composer 来利用此包
composer require "symfony2admingenerator/twig-generator"
用法
要生成 PHP 类,您需要创建一个 "Builder",以及一个或多个 Twig 模板。然后,将新的 Builder 添加到 "Generator",并生成结果。
创建 Builder 类
首先,创建一个继承自 TwigGenerator\Builder\BaseBuilder
的类 - 初始时不需要方法。
<?php namespace MyProject\Builder; use TwigGenerator\Builder\BaseBuilder; class MyBuilder extends BaseBuilder { }
提示:如果 Builder 需要扩展自定义类,则可以实施 TwigGenerator\Builder\BuilderInterface
。
创建 Twig 模板
接下来,在 templates/
目录下创建一些 twig 模板。通常,您需要一个用于主结构的模板,以及每个添加到类中的功能的模板。
以下是一个创建自定义 PHP 类的主要模板(或布局)示例(存储在 templates/_base/common.php.twig
)
<?php {{ namespace is defined ? "namespace " ~ namespace ~ ";" : "" }} class {{ className }} {{ extends is defined ? "extends " ~ extends : "" }} { {% block functions %} {% endblock %} }
现在,一个添加自定义方法的示例(存储在 templates/MyBuilder.php.twig
)
{% extends "_base/common.php.twig" %}
{% block functions %}
public function tellMeHello()
{
echo "Hello world";
}
{% endblock %}
生成代码
使用 TwigGenerator\Builder\Generator
实例来生成结果。例如
<?php // initialize the autoload require_once '/path/to/TwigGenerator/src/autoload.php'; // alternatively, use your favorite PSR-0 autoloader configured with TwigGenerator, Symfony and Twig // initialize a builder $builder = new MyProject\Builder\MyBuilder(); $builder->setOutputName('MyBuilder.php'); // add specific configuration for my builder $builder->setVariable('className', 'MyBuilder'); // create a generator $generator = new TwigGenerator\Builder\Generator(); $generator->setTemplateDirs(array( __DIR__.'/templates', )); // allways regenerate classes even if they exist -> no cache $generator->setMustOverwriteIfExists(true); // set common variables $generator->setVariables(array( 'namespace' => 'MyProject\Generated', )); // add the builder to the generator $generator->addBuilder($builder); // You can add other builders here // Run generation for all builders $generator->writeOnDisk(__DIR__.'/Generated');
文件将在 MyProject\Generated\MyBuilder.php
中生成,如下所示
<?php namespace MyProject\Generated; class MyBuilder { public function tellMeHello() { echo "Hello world"; } }
其他示例
您可以在测试中查看一些基本的代码生成示例,或在 GitHub 上的某些存储库中,如 fzaninotto/Doctrine2ActiveRecord 或 cedriclombardot/AdmingeneratorGeneratorBundle。
运行测试
通过 composer 安装依赖项后,您可以使用 vendor 文件中的 phpunit
vendor/phpunit/phpunit/phpunit