corneltek / genphp
Requires
- php: >=5.3.0
- corneltek/fileutil: ^1
- corneltek/phptask: ~1
- twig/twig: ~1.32.0|^2
Requires (Dev)
- corneltek/cliframework: 4.0.x-dev
- corneltek/codegen: @dev
- corneltek/phpunit-testmore: dev-master
- corneltek/universal: ^1
README
GenPHP 是一个功能强大、灵活的 PHP 代码/项目生成器,可以帮助您避免重复劳动。
GenPHP 可以生成您在风味中定义的任何内容,在生成器类中,您可以使用简单的生成器 API 来生成代码。
使用 GenPHP,您还可以区分全局生成器(~/.genphp/flavors
)、项目范围生成器(./flavors
)。
GenPHP 使用 Symfony 的 Twig 模板引擎。
要求
- PHP5.3
安装
将此行复制以安装 genphp
$ curl https://raw.github.com/c9s/GenPHP/master/scripts/install.sh | bash
安装内置风味
$ git clone https://github.com/c9s/GenPHP-Flavors ~/.genphp/flavors
用法
安装后,您可以运行 list
命令来列出您的风味,您可以将您的风味(生成器)放在全局风味路径(~/.genphp/flavors
)或您当前项目的风味路径(./flavors
或 ./.flavors
)中,例如
~GenPHP $ genphp list
Available flavors:
command flavors
flavor flavors
operation flavors
phpunit flavors
project flavors
flavor /Users/c9s/.genphp/flavors
phpunit /Users/c9s/.genphp/flavors
创建新的风味
GenPHP 的概念非常简单,当您运行 genphp new
时,它首先初始化一个风味加载器,然后使用风味加载器在几个位置中查找匹配的风味。
加载的风味实例初始化一个生成器(可以是 GenericGenerator 或 BaseGenerator),用于将风味资源目录中的内容生成到目标目录。您的生成器类在风味资源目录和目标目录之间工作。
创建风味
要创建您项目中的代码库中的风味,请输入
$ cd your_project
$ mkdir flavors
$ genphp new flavor foo ~/path/to/codebase
Loading flavor...
Inializing option specs...
Running generator...
create flavors/foo/Resource
create flavors/foo/Resource/file1
create flavors/foo/Resource/file2
create flavors/foo/Resource/file3
Done
您可以看到这里创建的文件,它使用 GenericGenerator 将 flavors/foo/Resource
复制到当前目录。
现在您可以将自己的文件(由生成器使用)放入 Resource
目录。
自定义您的风味和生成器
对于更复杂的用法,要创建自己的生成器,只需运行
$ genphp new flavor foo
Loading flavor...
Inializing option specs...
Running generator...
create flavors/foo/Resource
render flavors/foo/Generator.php
Done
创建不带代码库路径的新风味,然后打开 Generator.php
文件,在 generate
函数中编写您的生成器操作。
class Generator { public function brief() { return 'your generator brief'; } public function generate($argument1,$argument2) { // do your operations here $this->copyDir('etc','etc'); } }
将您喜欢的文件放入 flavors/foo/Resource
,然后您可以在 PHP 中编写操作代码。
测试您的风味
完成这些操作后,您可以使用 new
命令来生成您的风味
$ genphp new foo argument1 argument2
然后您的代码就生成了。
如果您想使您的风味全局(系统范围),您可以使用安装命令
$ genphp install flavors/foo
这会将风味安装到您的全局风味路径。
使用操作
GenPHP 提供了许多有用的操作,使您能够轻松编写生成任务。
CopyOperation
递归地从 flavors/foo/Resource/from/path 复制目录到 to/path
$this->copyDir('from/path','to/path');
TouchOperation
触摸一个文件
$this->touch('path/to/touch');
CreateOperation
创建一个新的文件并包含内容
$this->create('path/to/file', 'file content' );
CopyOperation
复制一个文件,从 Resource 目录复制 path/file1 到 file2
$this->copy( 'path/file1' , 'file2' );
CreateDirOperation
创建一个目录
$this->createDir( 'path/to/directory' );
RenderOperation
从 flavors/foo/Resource 加载 templateName.php.twig 模板,并将代码模板与变量渲染到文件中
$this->render('templateName.php.twig','path/to/file', array( 'className' => $className ));
WriteJsonOperation
写入一个 json 文件
$this->writeJson('file.json', array( 'name' => 'John' ) ); // executes WriteJsonOperation
WriteYamlOperation
写入一个 yaml 文件
$this->writeYaml('file.yaml', array( 'name' => 'John' ) ); // executes WriteJsonOperation
GitCloneOperation
克隆/拉取一个 git 仓库
$this->gitClone( 'git@github.com:.....git' , 'path/to/repo' );
HgCloneOperation
克隆/拉取一个 hg 仓库
$this->hgClone( 'hg uri' , 'path/to/repo' );
命令用法
要生成通用的 PHP 项目结构,GenPHP 为此提供了内置模板
$ genphp new project Foo create create src create src/Foo.php create src/Foo dependency ant create build.xml dependency phpunit create phpunit.xml.dist create tests
genphp 在 ./flavors
、./.flavors
、~/.genphp/flavors
中查找风味,您可以在这些路径中定义您的生成器。
要生成新的风味
$ genphp new flavor flavorName
从现有代码库生成新风味
$ genphp new flavor ProjectA ~/path/to/OneProject
列出模式
$ genphp list
请检查此存储库中的 ./flavors
目录以获取更多详细信息。
风味API
$path = $flavor->path( 'license' );
生成器运行器
$loader = new \Flavor\FlavorLoader; $flavor = $loader->load( $flavorName ); $generator = $flavor->getGenerator(); $generator->setLogger( $this->getLogger() ); $args = func_get_args(); array_shift($args); $runner = new \GenPHP\GeneratorRunner; $runner->logger = $logger; $runner->run($generator,$args);
生成器API
public fucntion generate($argument1,$argument2, ... ) { $file = $this->flavorLoader->load('license')->path('LICENSE.GPL2'); $this->copy($file, 'LICENSE' ); $this->copyDir( ); }
操作
使用内置操作,您可以非常容易地创建您的代码生成器,例如,GenPHP的内置风味代码生成器
namespace flavor; use GenPHP\Flavor\BaseGenerator; use GenPHP\Path; class Generator extends BaseGenerator { public function brief() { return "Default Flavor"; } public function generate($name) { $paths = Path::get_flavor_paths(); foreach( $paths as $path ) { if( file_exists($path) ) { $base = $path . DIRECTORY_SEPARATOR . $name; $this->createDir( $base . DIRECTORY_SEPARATOR . "Resource"); $this->render( 'Generator.php.twig', $base . DIRECTORY_SEPARATOR . 'Generator.php', array( 'name' => $name ) ); } } } }
操作名称魔法
// executes CopyDirOperation $this->copyDir('from/path','to/path'); // executes TouchOperation $this->touch('path/to/touch'); // executes TouchOperation $this->create('path/to/file', 'file content' ); // executes RenderOperation $this->render('templateName.php.twig','path/to/file', array( 'className' => $className )); // executes WriteJsonOperation $this->writeJson('file.json', array( ... ) ); // executes WriteJsonOperation
GenPHP支持许多操作
- CopyDirOperation
- CopyOperation
- CreateDirOperation
- CreateOperation
- RenderOperation
- TouchOperation
- WriteJsonOperation
- WriteYamlOperation
开发
-
在GitHub上分叉此项目
-
Git克隆它
$ git clone git@github.com:{{ your Id }}/GenPHP.git
-
安装onion http://github.com/c9s/Onion
-
运行
onion bundle
以安装PEAR依赖项。 -
运行
scripts/genphp
以测试您的genphp脚本。 -
运行
phpunit
以运行测试套件。 -
运行
scripts/compile.sh
以将整个库编译成可执行phar文件。
创建新操作
已经有一个用于创建新操作的示例,只需运行
$ ./scripts/genphp new operation DoSomething
创建新风味
$ ./scripts/genphp new flavor flavor_name
IRC
加入我们,在irc频道:irc.freenode.net上的#genphp