symfony2admingenerator/twig-generator

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

v2.0.2 2023-02-15 20:42 UTC

This package is auto-updated.

Last update: 2024-09-16 00:21:41 UTC


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/Doctrine2ActiveRecordcedriclombardot/AdmingeneratorGeneratorBundle

运行测试

通过 composer 安装依赖项后,您可以使用 vendor 文件中的 phpunit

   vendor/phpunit/phpunit/phpunit