memio / twig-template-engine
Memio 的 Twig 模板,用于从给定的模型生成 PHP 代码
v3.0.1
2024-08-14 21:22 UTC
Requires
- php: ^7.2 || ^8.0
- memio/model: ^3.0
- memio/pretty-printer: ^3.0
- twig/twig: ^1.18 || ^2.0 || ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.10
- phpspec/phpspec: ^6.1 || ^7.0
README
Memio 是一个高度意见化的 PHP 代码生成库。它由多个独立的小包组成,其中一个是 PrettyPrinter
:实际的代码生成器。
PrettyPrinter
依赖于一个接口,TemplateEngine
,但并不提供任何实现,以避免直接耦合到任何模板库。
本包,TwigTemplateEngine
,为 Twig 提供了实现和模板。
安装
使用 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
你可以使用以下方法查看当前和过去的版本
- 使用
git tag
命令 - 在 Github 的发行页面
- 列出版本之间更改的文件 CHANGELOG.md
最后是一些元文档