memio/twig-template-engine

Memio 的 Twig 模板,用于从给定的模型生成 PHP 代码

v3.0.1 2024-08-14 21:22 UTC

README

Memio 是一个高度意见化的 PHP 代码生成库。它由多个独立的小包组成,其中一个是 PrettyPrinter:实际的代码生成器。

PrettyPrinter 依赖于一个接口,TemplateEngine,但并不提供任何实现,以避免直接耦合到任何模板库。

本包,TwigTemplateEngine,为 Twig 提供了实现和模板。

注意:本包是 Memio 的一部分。请查看 主仓库

安装

使用 Composer 安装

composer require memio/twig-template-engine:^3.0

示例

我们将生成一个具有构造函数和两个属性的类

<?php

require __DIR__.'/vendor/autoload.php';

use Memio\Model\File;
use Memio\Model\Objekt;
use Memio\Model\Property;
use Memio\Model\Method;
use Memio\Model\Argument;

// Initialize the code generator
$loader = new \Twig\Loader\FilesystemLoader(__DIR__.'/templates');
$twig = new \Twig\Environment($loader);

$line = new Memio\TwigTemplateEngine\TwigExtension\Line\Line();
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\ContractLineStrategy());
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\FileLineStrategy());
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\MethodPhpdocLineStrategy());
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\ObjectLineStrategy());
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\StructurePhpdocLineStrategy());

$twig->addExtension(new Memio\TwigTemplateEngine\TwigExtension\Type());
$twig->addExtension(new Memio\TwigTemplateEngine\TwigExtension\Whitespace($line));

$templateEngine = new Memio\TwigTemplateEngine\TwigTemplateEngine($twig);
$prettyPrinter = new Memio\PrettyPrinter\PrettyPrinter($templateEngine);

// Describe the code you want to generate using "Models"
$myService = (new File('src/Vendor/Project/MyService.php'))
    ->setStructure(
        (new Objekt('Vendor\Project\MyService'))
            ->addProperty(new Property('createdAt'))
            ->addProperty(new Property('filename'))
            ->addMethod(
                (new Method('__construct'))
                    ->addArgument(new Argument('DateTime', 'createdAt'))
                    ->addArgument(new Argument('string', 'filename'))
            )
    )
;

// Generate the code and display in the console
echo $prettyPrinter->generateCode($myService);

// Or display it in a browser
// echo '<pre>'.htmlspecialchars($prettyPrinter->generateCode($myService)).'</pre>';

通过这个简单的示例,我们得到以下输出

<?php

namespace Vendor\Project;

class MyService
{
    private $createdAt;
    private $filename;

    public function __construct(DateTime $createdAt, string $filename)
    {
    }
}

请查看 主仓库 了解 Memio 的全部功能。

想要了解更多吗?

Memio 使用 phpspec,这意味着测试也提供了文档。你还不信?那么克隆这个仓库并运行以下命令

$ composer install
$ ./vendor/bin/phpspec run -n -f pretty

你可以使用以下方法查看当前和过去的版本

最后是一些元文档