前提:需要通过定时任务调用项目脚本执行业务逻辑
实现效果
php app/console/cli.php taskName actionName params=1 params=2 -------> params=(1,2)
php app/console/cli.php
php app/console/cli.php main test (默认例子)
方式
- 入口文件
cli.php
- 配置文件
config/core-cli.php
- 启动程序
Console.php
- 脚本任务命名空间
Consoles\Task\
- 命令行运行参数处理
$args
- 引入项目本身的服务与配置:共享MVC等组件
- 使用路由分发器Dispatcher:
Phalcon\Cli\Dispatcher
- 脚本任务类:
Phalcon\Cli\Task
<?php
namespace Core\base;
use Library\Traits\Response;
use Phalcon\Cli\Task;
class BaseTask extends Task
{
use Response;
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';
}
}
cli.php
<?php
require_once dirname(dirname(__FILE__)) . "/../vendor/autoload.php";
const ENV_DEV = 'dev';
const USER_AUTH_TOKEN = 'USER_AUTH_TOKEN';
$dotEnv = \Dotenv\Dotenv::create(dirname(dirname(dirname(__FILE__))));
$dotEnv->load();
define('VERSION', '1.0.0');
// 定义应用目录路径
defined('CONSOLE_TASK_PATH')
|| define('CONSOLE_TASK_PATH', realpath(dirname(__FILE__)));
define('PROJECT_PATH', dirname(dirname(dirname(__FILE__))));
define('APPLICATION_PATH', dirname(dirname(dirname(__FILE__))) . '/app');
define('LIBRARY_PATH', dirname(dirname(dirname(__FILE__))) . '/library');
define('APPLICATION_ENV', getenv('APPLICATION_ENV') ?: ENV_DEV);
define('ROOT', dirname(dirname(__DIR__)));
$config = include PROJECT_PATH . '/config/core-cli.php';
/**
* 处理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 {
$consoleApp = new Core\Console(APPLICATION_ENV, $config);
$console = $consoleApp->bootstrap();
$console->registerModules($config['application']['modules'], true);
$console->handle($arguments);
} catch (\Exception $e) {
echo $e->getMessage();
exit(400);
}
网友评论