5

是否可以在 cli 应用程序中使用 phalcon 来处理带有 argv 参数的请求?我想使用 argv 参数来理解应该执行的命令,例如 ./script.php robot/create --color=red --feature=weapon

并以这种方式通过控制器、操作等在我的应用程序中获取它:

控制器:机器人动作:创建 GET 参数:color=red,feature=weapon

是否可以使用 CLI 类,如

  1. Phalcon\CLI\Dispatcher http://docs.phalconphp.com/en/latest/api/Phalcon_CLI_Dispatcher.html

  2. Phalcon\CLI\Console http://docs.phalconphp.com/en/latest/api/Phalcon_CLI_Console.html

  3. Phalcon\CLI\Task http://docs.phalconphp.com/en/latest/api/Phalcon_CLI_Task.html

和其他类似的?

没有文档和操作手册......也许有人有经验或只是一个想法。我知道我们必须定义 DI 并初始化应用程序,但是如何以更本地的方式进行此操作我只是没有任何想法。

另外,还有一个问题:phalcon 可以自动处理 argv 参数吗?

据我了解,我们应该将 Phalcon\CLI\Console 对象作为应用程序启动并传递给它 DI。但是整个过程/场景......我就是不明白:)

4

3 回答 3

8

所以,我有以下文件夹结构:

~/www
~/www/app
~/www/app/models
~/www/app/controllers - controllers for web
~/www/app/tasks - task for cli
~/www/public/app.php - web application
~/www/cli/app.php - console application

在 cli/app.php 我有以下代码:

#!/usr/bin/php
<?php

/**
 * This makes our life easier when dealing with paths. 
 * Everything is relative to the application root now.
 */ 
chdir(dirname(__DIR__));

/**
 * Init loader
 */
$loader = new \Phalcon\Loader();
$loader->registerDirs(['app/tasks/'])
       ->register(); 

/**
 * Setup dependency injection      
 */       
$di = new Phalcon\DI();

// Router
$di->setShared('router', function() {
    return new Phalcon\CLI\Router();
});

// Dispatcher
$di->setShared('dispatcher', function() {
    return new Phalcon\CLI\Dispatcher();
});

/**
 * Run application
 */
$app = new Phalcon\CLI\Console();
$app->setDI($di);
$app->handle($argv);

然后我把我的任务类放在 app/tasks 文件夹中......它就可以工作了。也许这会对某人有所帮助;)

于 2013-02-11T08:19:23.820 回答
1

我是 Phalcon 的爱好者,但在我看来,任务实际上是创建 cron 工作的东西。它们与命令不同。我不认为任务是创建完整 cli 应用程序的正确方法。有很多限制。我真的建议你改用 Symfony 控制台:它有很好的文档,它管理多个参数和参数,它自动提供命令行帮助,你可以通过 Composer 安装它。如果您正在创建 cron 作业,您可以使用 Phalcon 任务,但如果您打算创建一个 cli 应用程序,请查看 Symfony Console。

于 2013-08-29T14:51:22.233 回答
1

phalcon 可以自动处理 argv 参数吗?

是的,PHP 将$argv在任何框架中传递命令行参数。

于 2016-02-17T07:28:49.387 回答