帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:Shell    PHP  framework  
PHP Shell Framework - creating shell applications

  • 源代码名称:php-shell-framework
  • 源代码网址:http://www.github.com/piotrooo/php-shell-framework
  • php-shell-framework源代码文档
  • php-shell-framework源代码下载
  • Git URL:
    git://www.github.com/piotrooo/php-shell-framework.git
  • Git Clone代码到本地:
    git clone http://www.github.com/piotrooo/php-shell-framework
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/piotrooo/php-shell-framework
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • PHP shell-框架

    这里框架可以用于创建完全 shell 脚本。

    配置

    • 副本 /path/to/php-shell-framework/config/psf.config.php 到你的代码基础位置 /path/to/application/psf.config.phpapplication_dirs 设置为相应的控制台应用程序。
    • 在应用程序目录内创建包含 shell 应用程序的目录 Console

    正在创建新应用程序

    要新建应用程序,必须以英镑/控制台位置创建新的PHP文件,文件名应该是英镑/。

    新创建的文件应具有以下要求:

    • 类 inside 文件的名称应与文件对应。
    • 类应该从 Shell 扩展并实现 ApplicationInterface

    因此,创建的appliaction应该类似于:

    <?phpnamespaceConsole;usePsfInterfacesApplicationInterface;usePsfShell;classHelloShellextendsShellimplementsApplicationInterface{publicfunctionconfigure() { }publicfunctionmain() {$this->out("Hello world"); }}?>

    正在运行应用程序

    创建应用程序后,我们希望从控制台运行它。

    来自 shell的 Basicly调用

    
    $ php psf.php app:hello
    
    
    
    

    约束 app 决定应调用哪个应用程序。 在调用之后,我们的应用程序通过使用 out 方法在 STDOUT 字符串 Hello World

    参数调用

    
    $ php psf.php app:hello -N --user=Piotr
    
    
    
    

    应用程序可以接受短类型和长类型参数。

    PHP shell 框架实现了这种方法:

    http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html

    http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html

    可能的组合:

    • -n 不带参数的短参数,return true
    • 带参数,空格,返回 hello的-n hello 参数。
    • -nhello 参数带有参数,没有空格 separed,返回 hello
    • --user 参数不带参数,return true
    • 参数:带参数的长参数,等号 separed,返回Piotr函数。

    要在方法 configure 中添加对参数的支持,必须设置每个参数的参数。

    publicfunctionconfigure(){$this->addParameter('N', 'namespace')->addParameter('u', 'user');}

    这种配置让我们能够调用我们的参数。

    这里调用:

    
    $ php psf.php app:hello -N php/shell/output
    
    
    
    

    对应于:

    
    $ php psf.php app:hello --namespace php/shell/output
    
    
    
    

    main 方法中,我们得到如下参数:

    
    $namespace = $this->getParameterValue('namespace');
    
    
    
    

    这里getter对 -n--namespace 参数同样有效。

    如果我们调用类似这样的应用程序,则为特殊情况:

    
    $ php psf.php app:hello -N php/shell/output --namespace php/formatter
    
    
    
    

    getParameterValue 方法将返回 php/formatter

    输出

    当你希望在 STDOUT 上显示someting时,可以使用 out 方法:

    $this->out("Hello World Today!!!");

    打印:

    
    Hello World Today!!!
    
    
    
    

    你可以定义输出消息后应该有多少行:

    $this->out("Hello World Today!!!", 5);

    打印:

    
    Hello World Today!!!
    
    
    
    
    

    控制台输出级别

    有时你需要不同程度的细节。 PHP shell 框架提供三个级别:

    • 静音
    • 正常
    • 详细

    NORMAL 级别的缺省所有输出。 如果你想要更改级别,必须在 out 方法中定义。

    示例:

    $this->out('This message is in normal verbosity');$this->out('This message is in quiet verbosity', 1, Writer::VERBOSITY_QUIET);$this->out('This message is in verbose verbosity', 1, Writer::VERBOSITY_VERBOSE);

    如果要在 NORMAL 级别运行应用程序:

    
    $ php psf.php app:hello
    
    
    
    

    输出:

    
    This message is in normal verbosity
    
    
    This message is in quiet verbosity
    
    
    
    

    如果要在 QUIET 级别运行应用程序:

    
    $ php psf.php app:hello --quiet
    
    
    
    

    输出:

    
    This message is in quiet verbosity
    
    
    
    

    如果要在 VERBOSE 级别运行应用程序:

    
    $ php psf.php app:hello --verbose
    
    
    
    

    输出:

    
    This message is in normal verbosity
    
    
    This message is in quiet verbosity
    
    
    This message is in verbose verbosity
    
    
    
    

    样式输出

    样式化输出由用户定义的标记完成- 如 XML。 使用样式formetter的PHP shell 框架将替换XML标记以正确定义已经定义的ANSI代码序列。

    要使用你所做的ANSI代码声明新的XML标记和 corresonding:

    $styleFormat=newStyleFormatter('gray', 'magenta', array('blink', 'underline'));$this->setFormatter('special', $styleFormat);

    在输出消息中允许 <special> 标记,将文本颜色设置为 gray,background 颜色为 magenta,并有两个效果- blinkunderline

    $this->out("<special>Hello</special> orld <special>Today</special>!!!");

    可以将以下颜色用于文字属性:

    • 黑色
    • 红色
    • 绿色
    • 褐色
    • 蓝色
    • 洋红色
    • 青色
    • 灰色

    对于 background 颜色使用:

    • 黑色
    • 红色
    • 绿色
    • 褐色
    • 蓝色
    • 洋红色
    • 青色
    • 白色

    你也可以使用以下效果:

    • 默认值
    • 粗体
    • 下划线
    • 闪烁
    • 反转
    • 隐藏

    方法 read 从读取和interprest字符,通常是用户在键盘上键入的字符。

    read的用法:

    $this->out("Type how old are you: ", 0);$age=$this->read();if (!empty($age)) {$this->out('You have '.$age.' years old - nice!');}

    这段代码等待单元用户在键盘上键入内容。

    帮助器

    在框架中,我们可以使用助手来生成一些视图。

    表是生成表格数据的简单 helper。

    table的用法:

    $table=$this->getHelper('Table');$table->setHeaders(array('ID', 'Name', 'Surname'))->setRows(array(array('1', 'John', 'Smith'),array('2', 'Brad', 'Pitt'),array('3', 'Denzel', 'Washington'),array('4', 'Angelina', 'Jolie') ));$table->render($this->getStdout());

    将生成:

    
    +----+----------+------------+
    
    
    | ID | Name | Surname |
    
    
    +----+----------+------------+
    
    
    | 1 | John | Smith |
    
    
    | 2 | Brad | Pitt |
    
    
    | 3 | Denzel | Washington |
    
    
    | 4 | Angelina | Jolie |
    
    
    +----+----------+------------+
    
    
    
    

    另外,我们可以使用 addRow 方法在 table 中添加一行:

    $table->addRow(array('5', 'Peter', 'Nosurname'));

    将产生:

    
    +----+----------+------------+
    
    
    | ID | Name | Surname |
    
    
    +----+----------+------------+
    
    
    | 1 | John | Smith |
    
    
    | 2 | Brad | Pitt |
    
    
    | 3 | Denzel | Washington |
    
    
    | 4 | Angelina | Jolie |
    
    
    | 5 | Peter | Nosurname |
    
    
    +----+----------+------------+
    
    
    
    

    进度栏

    这里 helper 提供进度功能。

    progress bar的用法:

    $progress=$this->getHelper('ProgressBar');$progress->initialize($this->getStdout(), 9);for ($i=0; $i<9; $i++) {$progress->increment();sleep(1);}

    将产生:

    
    4/9 (44%) [======================............................]
    
    
    
    

    加载程序

    加载器 helper 获得显示加载程序伪动画的可能性。

    loader的用法:

    $loader=$this->getHelper('Loader');$loader->initialize($this->getStdout());for ($i=0; $i<10; $i++) {$loader->start();sleep(1);}

    另外,我们可以通过方法 setCharSequence 设置显示字符序列来定制加载程序:

    $loader->setCharSequence(array('.', '..', '...'));


    文章标签:  framework  PHP  Shell  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语