首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Phalcon CLI任务名

Phalcon CLI任务名
EN

Stack Overflow用户
提问于 2017-01-26 13:10:01
回答 1查看 3K关注 0票数 4

我有MainTask.php和SomeOtherTask.php文件的文件夹任务..。

如何只运行SomeOtherTask?

要运行主要任务,我只需编写

php cli.php

但我想要一个严肃的文件名而不是MainTask..。

这是我的另一项任务:

代码语言:javascript
运行
复制
<?php
use Phalcon\Cli\Task;

class DeleteExpiredAuthTokens extends Task{

    public function mainAction()
    {
        echo "Hello world war Z";
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 14:25:40

目录设置-

您需要在tasks/中创建一个app/目录,然后您可以创建适当的文件名;例如;

代码语言:javascript
运行
复制
app/
├── tasks/
│   ├── SomeTask.php
│   ├── SomeOtherTask.php
│
├── cli.php

现在,您需要创建一个cli.php文件,命令行将调用该文件。在这里,您需要查看调用参数并将其传递到$console->handle()方法中。例如;

cli.php

代码语言:javascript
运行
复制
<?php

use Phalcon\Di\FactoryDefault\Cli as CliDI;
use Phalcon\Cli\Console as ConsoleApp;
use Phalcon\Loader;


// Using the CLI factory default services container
$di = new CliDI();

$arrBasePath = preg_split("/\//", __DIR__);
$limit = sizeof($arrBasePath);

$strBasePath = "";
for ($count = 0; $count < $limit - 1; $count++) {
    $strBasePath .= $arrBasePath[$count] . '/';
}

define('BASE_PATH', $strBasePath);

/**
 * Register the autoloader and tell it to register the tasks directory
 */
$loader = new Loader();

$loader->registerDirs(
    [
        __DIR__ . "/tasks",
        __DIR__ . "/models",
        __DIR__ . "/controllers"
    ]
);

$loader->register();

// Create a console application
$console = new ConsoleApp();
$console->setDI($di);

//Process the console arguments
$arguments = [];
foreach ($argv as $k => $arg) {
    if ($k == 1) {
        $arguments["task"] = $arg;
    } elseif ($k == 2) {
        $arguments["action"] = $arg;
    } elseif ($k >= 3) {
        $arguments["params"][] = $arg;
    }
}

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

现在,假设在app/tasks/SomeTask.php中,您有以下内容;

app/tasks/SomeTask.php

代码语言:javascript
运行
复制
use Phalcon\Cli\Task;

class SomeTask extends Task
{

    public function MainAction()
    {
        echo "This is the main action\r\n";
    }

    public function OtherAction()
    {
        echo "This is other action\r\n";
    }

}

例如,您可以通过在参数中传递任务来调用任务;

代码语言:javascript
运行
复制
$ php cli.php some
This is the main action

或者,通过传递它来调用另一个方法;

代码语言:javascript
运行
复制
$ php cli.php some other
This is other action

Notes

  • 类名需要以Task结尾。当调用这个类时,您忽略它。看看我是如何调用someTask类的。
  • 在您的示例中,将DeleteExpiredAuthTokens重命名为DeleteExpiredAuthTokensTask,否则您将得到以下错误消息:DeleteExpiredAuthTokensTask handler class cannot be loaded
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41874177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档