Phalcon CLI 任务名称
Phalcon CLI task name
我有 MainTask.php 和 SomeOtherTask.php 个文件的文件夹任务...
如何才能 运行 只有 SomeOtherTask?
到运行主线任务我只需要写
php cli.php
,但我想要一些严肃的文件名而不是 MainTask...
这是我的另一个任务:
<?php
use Phalcon\Cli\Task;
class DeleteExpiredAuthTokens extends Task{
public function mainAction()
{
echo "Hello world war Z";
}
}
目录set-up
您需要在app/
中创建一个tasks/
目录,然后您就可以制作合适的文件名;例如;
app/
├── tasks/
│ ├── SomeTask.php
│ ├── SomeOtherTask.php
│
├── cli.php
现在,您需要创建一个 cli.php
文件,您的命令行将调用该文件。在这里,您需要查看调用参数并将其传递到 $console->handle()
方法中。例如;
cli.php
<?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
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";
}
}
您可以通过在参数中传递它们来调用您的任务,例如;
$ php cli.php some
This is the main action
或者,通过传递调用另一个方法;
$ php cli.php some other
This is other action
备注
- 您的 class 名称需要以
Task
结尾。当调用此 class 时,您将其省略。看我怎么调用 someTask
class.
- 在您的示例中,将
DeleteExpiredAuthTokens
重命名为 DeleteExpiredAuthTokensTask
否则您将收到以下错误消息:DeleteExpiredAuthTokensTask handler class cannot be loaded
我有 MainTask.php 和 SomeOtherTask.php 个文件的文件夹任务...
如何才能 运行 只有 SomeOtherTask?
到运行主线任务我只需要写
php cli.php
,但我想要一些严肃的文件名而不是 MainTask...
这是我的另一个任务:
<?php
use Phalcon\Cli\Task;
class DeleteExpiredAuthTokens extends Task{
public function mainAction()
{
echo "Hello world war Z";
}
}
目录set-up
您需要在app/
中创建一个tasks/
目录,然后您就可以制作合适的文件名;例如;
app/
├── tasks/
│ ├── SomeTask.php
│ ├── SomeOtherTask.php
│
├── cli.php
现在,您需要创建一个 cli.php
文件,您的命令行将调用该文件。在这里,您需要查看调用参数并将其传递到 $console->handle()
方法中。例如;
cli.php
<?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
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";
}
}
您可以通过在参数中传递它们来调用您的任务,例如;
$ php cli.php some
This is the main action
或者,通过传递调用另一个方法;
$ php cli.php some other
This is other action
备注
- 您的 class 名称需要以
Task
结尾。当调用此 class 时,您将其省略。看我怎么调用someTask
class. - 在您的示例中,将
DeleteExpiredAuthTokens
重命名为DeleteExpiredAuthTokensTask
否则您将收到以下错误消息:DeleteExpiredAuthTokensTask handler class cannot be loaded