我想根据模板生成代码。
假设/Templates
我的文件结构为:
/Templates
并说文件具有以下内容(需要解析{{ }}
附带的变量):
供应商/插件/ config.xml中:
<?xml version="1.0"?>
<config>
<module>{{Vendor}}/{{Plugin}}</module>
<version>{{Version}}</version>
{{if $HasTable}}
<database>
<table>{{TableName}}</table>
<pk>{{PrimaryKey}}</pk>
<fields>
{{foreach $Fields}}
<field>
<name>{{Fields.Name}}</name>
<label>{{Fields.Label}}</label>
<type>{{Fields.Type}}</type>
</field>
{{/foreach}}
</fields>
</database>
{{/if}}
</config>
供应商/插件/型号/ Plugin.php:
<?php
/**
* @category {{Vendor}}_{{Plugin}}
* @author {{Author}}
*/
class {{Vendor}}_{{Plugin}}_Model_{{Plugin}} extends Core_Model_Abstract
{
public function __construct()
{
parent::__construct();
}
{{if $HasTable}}
public function setTable()
{
$this->_tableName = '{{TableName}}';
}
public function setPrimaryKey()
{
$this->_primaryKey = '{{PrimaryKey}}';
}
public function setFields()
{
$this->_fields = Core::Config('database/table/fields');
}
{{/if}}
}
供应商/插件/视图/ plugin.phtml:
{{TableName}} Rows
<table>
<tr>
{{foreach $Fields}}
<th>{{$Fields.Label}}</th>
{{/foreach}}
</tr>
<?php foreach ($data as $_data) ?>
<tr>
{{foreach $Fields}}
<td><?php echo $_data['{{$Fields.Name}}'] ?></td>
{{/foreach}}
</tr>
<?php endforeach; ?>
</table>
代码生成器应该如何工作?
1&GT;一个GUI表单,允许用户至少添加以下字段
供应商: 插入: 版: 作者:
有桌子吗?: 如果选择为是,它将允许用户添加更多字段,如表名,字段等。
2 - ;在提交表单时,它会将/ Templates文件夹中的代码生成到某个目录 逻辑可以是: 准备变量以提供给CoreGenerator(要开发的类),它将读取所有模板文件并通过解析这些变量重新生成它们。
/Template
的预期输出将是:
(假设我们从用户输入中得到以下值:
Vendor: Foo
Plugin: Bar
Version: 1.0.0
Author: John Doe <john.doe@example.com>
Has Tables?: Yes
Table Name: blog
Primary Key: blog_id
Fields:
+ Name: title, Label: Title, Type: Text
+ Name: status, Label: Status, Type:Int
...
)
/Generated
生成的内容:
富/酒吧/ config.xml中:
<?xml version="1.0"?>
<config>
<module>Foo/Bar</module>
<version>1.0.0</version>
<database>
<table>blog</table>
<pk>blog_id</pk>
<fields>
<field>
<name>title</name>
<label>Title</label>
<type>Text</type>
</field>
<field>
<name>status</name>
<label>Status</label>
<type>Int</type>
</field>
<!--... -->
</fields>
</database>
</config>
富/酒吧/型号/ Bar.php:
<?php
/**
* @category Foo_Bar
* @author John Doe <john.doe@example.com>
*/
class Foo_Bar_Model_Bar extends Core_Model_Abstract
{
public function __construct()
{
parent::__construct();
}
public function setTable()
{
$this->_tableName = 'blog';
}
public function setPrimaryKey()
{
$this->_primaryKey = 'blog_id';
}
public function setFields()
{
$this->_fields = Core::Config('database/table/fields');
}
}
富/酒吧/视图/ bar.phtml:
blog Rows
<table>
<tr>
<th>Title</th>
<th>Status</th>
</tr>
<?php foreach ($data as $_data) ?>
<tr>
<td><?php echo $_data['title'] ?></td>
<td><?php echo $_data['status'] ?></td>
</tr>
<?php endforeach; ?>
</table>
所以我主要关注的是代码生成器类/库,它将从用户输入中收集占位符值,从/Templates
文件夹中读取所有这些文件,并在解析这些变量后重新生成它们(简单,条件,循环等) 。)到/Generated
文件夹。
对此有任何见解,我该如何开始?任何粗略的想法,解决方案和参考文献非常感谢。 提前谢谢。
答案 0 :(得分:1)
我建议您使用gui接口代替cli接口。因为这样更容易定制。
作为参考,您可以使用Yeoman作为一个大型文件夹的大型脚手架工具,它可以帮助您以更少的努力构建发电机。 http://yeoman.io/
获取灵感,请看一下这个生成器演示: https://github.com/DaftMonk/generator-angular-fullstack