cedriclombardot / twig-generator
基于Twig模板引擎的PHP代码生成器
Requires
- php: >=5.3.0
- twig/twig: >=1.1, <2.0-dev
This package is auto-updated.
Last update: 2024-08-24 03:20:56 UTC
README
TwigGenerator是基于Twig模板引擎的PHP代码生成器。它利用Twig模板的强大功能,简化PHP代码的生成,使其更具可扩展性和可读性。
安装
检出此GitHub仓库并设置composer依赖项(Twig和Symfony ClassLoader)
git clone https://github.com/cedriclombardot/TwigGenerator.git
cd TwigGenerator
wget -nc https://getcomposer.org.cn/composer.phar
php composer.phar install
用法
要生成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。
单元测试
然后,只需运行
phpunit