文档
Welcome! 安装(Installation) 示例列表(List of examples) 依赖注入与服务定位器(Dependency Injection/Service Location) MVC 架构(The MVC Architecture) 使用控制器(Using Controllers) 使用模型(Working with Models) 模型元数据(Models Meta-Data) 事务管理(Model Transactions) Phalcon 查询语言(Phalcon Query Language (PHQL)) 缓存对象关系映射(Caching in the ORM) 对象文档映射 ODM (Object-Document Mapper) 使用视图(Using Views) 视图助手(View Helpers) 资源文件管理(Assets Management) Volt 模版引擎(Volt: Template Engine) MVC 应用(MVC Applications) 路由(Routing) 调度控制器(Dispatching Controllers) 微应用(Micro Applications) 使用命名空间(Working with Namespaces) 事件管理器(Events Manager) 请求环境 (Request Environment) 返回响应(Returning Responses) Cookie 管理(Cookies Management) 生成 URL 和 路径(Generating URLs and Paths) 闪存消息(Flashing Messages) 使用 Session 存储数据(Storing data in Session) 过滤与清理(Filtering and Sanitizing) 上下文编码(Contextual Escaping) 验证(Validation) 表单(Forms) 读取配置(Reading Configurations) 分页(Pagination) 使用缓存提高性能(Improving Performance with Cache) 安全(Security) 加密/解密( Encryption/Decryption ) 访问控制列表 ACL(Access Control Lists ACL) 多语言支持(Multi-lingual Support) 通用类加载器 ( Universal Class Loader ) 日志记录(Logging) 注释解析器(Annotations Parser) 命令行应用(Command Line Applications) 队列(Queueing) 数据库抽象层(Database Abstraction Layer) 国际化(Internationalization) 数据库迁移(Database Migrations) 调试应用程序(Debugging Applications) Phalcon 开发工具(Phalcon Developer Tools) 提高性能:下一步该做什么?(Increasing Performance: What's next?) 单元测试(Unit testing) 授权(License)
教程

发布于 2015-08-21 15:26:58 | 312 次阅读 | 评论: 0 | 来源: 网络整理

命令行应用(Command Line Applications)

CLI应用即是运行在命令行窗体上的应用。 主要用来实现后台任务, 命令行工具等。

结构(Structure)

最小结构的CLI程序如下:

  • app/config/config.php
  • app/tasks/MainTask.php
  • app/cli.php <– 主要启动文件

创建引导(Creating a Bootstrap)

普通的MVC程序中,启动文件用来启动整个应用。和web应用不同, 此处应用中我们使用cli.php来作为启动文件。

下面是一个简单的启动文件示例:

<?php

use PhalconDIFactoryDefaultCLI as CliDI,
    PhalconCLIConsole as ConsoleApp;

define('VERSION', '1.0.0');

// 使用CLI工厂类作为默认的服务容器
$di = new CliDI();

// 定义应用目录路径
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__)));

/**
 * 注册类自动加载器
 */
$loader = new PhalconLoader();
$loader->registerDirs(
    array(
        APPLICATION_PATH . '/tasks'
    )
);
$loader->register();

// 加载配置文件(如果存在)
if (is_readable(APPLICATION_PATH . '/config/config.php')) {
    $config = include APPLICATION_PATH . '/config/config.php';
    $di->set('config', $config);
}

// 创建console应用
$console = new ConsoleApp();
$console->setDI($di);

/**
 * 处理console应用参数
 */
$arguments = array();
foreach ($argv as $k => $arg) {
    if ($k == 1) {
        $arguments['task'] = $arg;
    } elseif ($k == 2) {
        $arguments['action'] = $arg;
    } elseif ($k >= 3) {
        $arguments['params'][] = $arg;
    }
}

// 定义全局的参数, 设定当前任务及动作
define('CURRENT_TASK',   (isset($argv[1]) ? $argv[1] : null));
define('CURRENT_ACTION', (isset($argv[2]) ? $argv[2] : null));

try {
    // 处理参数
    $console->handle($arguments);
} catch (PhalconException $e) {
    echo $e->getMessage();
    exit(255);
}

上面的代码可以使用如下方式执行:

$ php app/cli.php

这样程序会直接执行默认的任务及默认动作.

任务(Tasks)

这里的任务同于web应用中的控制器。 任一 CLI 应用程序都至少包含一个mainTask 及一个 mainAction, 每个任务至少有一个mainAction, 这样在使用者未明确的 指定action时 此mainAction就会执行。

下面即是一个mainTask的例子( app/tasks/MainTask.php ):

<?php

class MainTask extends PhalconCLITask
{
    public function mainAction()
    {
        echo "nThis is the default task and the default action n";
    }
}

处理动作参数(Processing action parameters)

CLI应用中, 开发者也可以在action中处理传递过来的参数, 下面的例子中已经对传递过来的参数进行了处理。

如果你使用下面的参数和动作运行应用程序:

<?php

class MainTask extends PhalconCLITask
{
    public function mainAction()
    {
        echo "nThis is the default task and the default action n";
    }

    /**
     * @param array $params
     */
    public function testAction(array $params)
    {
        echo sprintf('hello %s', $params[0]) . PHP_EOL;
        echo sprintf('best regards, %s', $params[1]) . PHP_EOL;
    }
}

我们可以使用下面的命令行及参数执行程序:

$ php app/cli.php main test world universe

hello world
best regards, universe

链中运行任务(Running tasks in a chain)

CLI应用中可以在一个action中执行另一action. 要实现这个需要在 DI 中设置console.

<?php

$di->setShared('console', $console);

try {
    // Handle incoming arguments
    $console->handle($arguments);
} catch (PhalconException $e) {
    echo $e->getMessage();
    exit(255);
}

然后开发者即可在一个action中使用用其它的action了. 下面即是例子:

<?php

class MainTask extends PhalconCLITask
{
    public function mainAction()
    {
        echo "nThis is the default task and the default action n";

        $this->console->handle(
            array(
                'task'   => 'main',
                'action' => 'test'
            )
        );
    }

    public function testAction()
    {
        echo "nI will get printed too!n";
    }
}

当然, 通过扩展 PhalconCliTask 来实现如上操作会是一个更好主意。

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务