定時(shí)任務(wù)代碼使用注解依賴注入的數(shù)據(jù)庫模型會報(bào)錯(cuò),只能使用構(gòu)造函數(shù)的方式進(jìn)行依賴注入
class Task
{
public function onWorkerStart()
{
//調(diào)用模型查詢
$taskList = (new Crontab())->select();
foreach ($taskList as $item) {
new Crontab($item->rule, function () use ($item) {
$this->run($item);
});
}
}
public function run($args)
{
echo $args->name.'任務(wù)開始調(diào)用:'.date('Y-m-d H:i:s')."\n";
//執(zhí)行定時(shí)任務(wù)
$service = new CrontabService();
$result = $service->run($args->id);
if ($result) {
echo $args->name.'任務(wù)調(diào)用成功:'.date('Y-m-d H:i:s')."\n";
} else {
echo $args->name.'任務(wù)調(diào)用失?。?.date('Y-m-d H:i:s')."\n";
}
}
}
class CrontabService extends BaseService
{
//只能用構(gòu)造函數(shù),可以正常執(zhí)行
public function __construct()
{
$this->model = new Crontab();
}
//注解注入會報(bào)find方法找不到錯(cuò)誤
/**
* @Inject
* @var Crontab
*/
protected $model;
public function run($id)
{
//THINK ORM find方法查詢
$info = $this->model->find($id);
...
}
}
必須是由框架或者php-di創(chuàng)建的實(shí)例才能完成依賴自動注入,手動new的實(shí)例無法完成依賴自動注入,如需注入,需要使用support\Container接口替換new語句
文檔說的,自己new的類不支持注入
//執(zhí)行定時(shí)任務(wù)
$service = new CrontabService();
你的代碼明顯是自己new的,不是容器創(chuàng)建的