[FuelPHP 1.7] 从任务中执行任务

这是开发团队的草壁。

首先,在创建 FuelPHP 任务时,您是否考虑过从另一个任务中运行该任务?我将在这里解释一下。

从任务中运行任务

假设你有一个这样的任务,运行后会显示“sugoi”:

taskone.php

<?php namespace Fuel\Tasks; class TaskOne { public static function run() { \Cli::write('sugoi'); return 0; } }

我们考虑在另一个任务中执行 TaskOne。
我们将调用 TaskOne 的任务定义为 TheTask。

目录结构是

 燃料
  └
   任务
     ├taskone.php
     └thetask.php

假设真是如此。

thetask.php

<?php namespace Fuel\Tasks; class TheTask { public static function run() { TaskOne::run(); return 0; } }

这样可以吧?我们来运行TheTask。

$ 石油精炼 TheTask 致命错误 - 在 APPPATH/tasks/thetask.php 第 8 行找不到类“Fuel\Tasks\TaskOne”。

不,这不可能。找不到 TaskOne 类。
我原以为自动加载器能够加载它,因为它在同一个命名空间里,但事实并非如此。我必须手动指示它加载。

加载任务

你只需要加载 taskone.php 文件即可。

[已弃用]

require_once '/path/fuel/app/tasks/taskone.php';

这样就可以加载目标文件,但你可能不想直接在源代码中写入文件路径。
我们来考虑一种动态获取路径的方法。
参考 Oil 命令的实现(fuel/packages/oil/classes/command.php),你可以这样做:

[受到推崇的]

<?php namespace Fuel\Tasks; class TheTask { public static function run() { # tasksディレクトリの中からTaskOneに対応するファイルを探し、そのパスを取得 $file = \Finder::search('tasks', strtolower('TaskOne')); # TaskOneのファイルをロード require_once $file; # TaskOneを実行 TaskOne::run(); return 0; } }

我们来试运行一下。

$石油精炼任务 sugoi

搞定了。就这样。

下次,我们将探讨一些更复杂的问题:如何从任务内部调用模块中的任务。

如果您觉得这篇文章对您有帮助,请点个“赞”!
1
加载中...
1票,平均分:1.00/11
3,682
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者