cedriclombardot/twig-generator

基于Twig模板引擎的PHP代码生成器

v1.1.0 2015-01-07 07:20 UTC

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