corneltek/genphp

此包的最新版本(1.4.0)没有可用的许可证信息。

1.4.0 2017-05-19 16:32 UTC

This package is auto-updated.

Last update: 2024-08-29 04:08:58 UTC


README

GenPHP 是一个功能强大、灵活的 PHP 代码/项目生成器,可以帮助您避免重复劳动。

GenPHP 可以生成您在风味中定义的任何内容,在生成器类中,您可以使用简单的生成器 API 来生成代码。

使用 GenPHP,您还可以区分全局生成器(~/.genphp/flavors)、项目范围生成器(./flavors)。

GenPHP 使用 Symfony 的 Twig 模板引擎。

Build Status

要求

  • 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

参考