【问题标题】:Phalcon and cli applicationsPhalcon 和 cli 应用程序
【发布时间】:2013-01-26 06:59:15
【问题描述】:

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

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

控制器:机器人 行动:创造 获取参数: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 传递给它。但是整个过程/场景……我就是看不懂:)

【问题讨论】:

    标签: php command-line-interface phalcon


    【解决方案1】:

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

    ~/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 文件夹中......它就可以工作了。 也许这会对某人有所帮助;)

    【讨论】:

    • 还有 Phalcon\DI\FactoryDe​​fault\CLI 设置依赖项以在 CLI 中运行应用程序
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • @PhiterFernandes 这不是一个新问题。这是对问题主体中一个问题的回答。请在审核时更加小心。
      猜你喜欢
      • 2012-03-29
      • 2018-05-20
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多