2013-02-11 97 views
4

是否可以在cli應用程序中使用phalcon來處理帶有argv參數的請求? 我想使用argv參數來理解應該執行的命令,例如 ./script.php robot/create --color=red --feature=weaponPhalcon和cli應用程序

,並得到這個我的控制器,動作等這樣的應用程序中:

控制器:機器人 動作:創建 GET PARAMS:顏色=紅色,功能=武器

是有可能使用CLI類等

  1. 多爾康\ CLI \分派器 http://docs.phalconphp.com/en/latest/api/Phalcon_CLI_Dispatcher.html

  2. 爾康\ CLI \控制檯http://docs.phalconphp.com/en/latest/api/Phalcon_CLI_Console.html

  3. 爾康\ CLI \任務http://docs.phalconphp.com/en/latest/api/Phalcon_CLI_Task.html

和其他類似的?

沒有文檔和操作指南..也許有人有經驗或只是一個想法。 我忽略了我們必須定義DI並初始化應用程序,但是如何以更原始的方式來實現這一點,我只是沒有任何想法。

另外,還有一個問題:phalcon可以自動處理argv參數嗎?

據我所知,我們應該啓動Phalcon \ CLI \ Console對象作爲應用程序並傳遞給它。但整個過程/方案...我只是無法得到它:)

回答

7

所以,我有以下文件夾結構:

~/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); 

然後我把我的任務類放在應用程序/任務文件夾..它只是工作。 也許這將有助於某人;)

+2

還有Phalcon \ DI \ FactoryDe​​fault \ CLI設置依賴項以在CLI中運行應用程序 – twistedxtra 2013-02-14 05:44:25

1

我是一個Phalcon愛好者,但實際上任務似乎創造cron工作的東西。它們與命令不同。我不認爲任務是創建完整cli應用程序的正確方法。有很多限制。我真的建議你使用Symfony控制檯:它有很好的文檔記錄,它管理多個參數和參數,它自動提供命令行幫助,並且可以通過Composer進行安裝。 如果您正在創建cron作業,您可以使用Phalcon任務,但如果您打算創建cli應用程序,請查看Symfony控制檯。

-1

可以phalcon自動處理argv參數嗎?

是的,PHP會在任何框架中將命令行參數傳遞給。

+0

@PititerFernandes這不是一個新問題。這是問題主體問題之一的答案。審查時請小心。 – 2016-02-20 16:35:54