Laravel队列作业未加载文件

时间:2019-08-28 08:16:41

标签: laravel laravel-queue laravel-helper

我对于为Laravel Queue / Job加载文件有点困惑

我正在使用Laravel排队/异步作业(我们称其为易于使用的作业)

Oke让我们从头开始,我们拥有自己的翻译功能,并且也将其命名为__(),就像Laravel中的默认名称一样,不要问我为什么等等。(简单的解决方案是将其重命名,我知道),但这是我必须坚持的(除非这是不可修复的)。

因此要在Laravel之前声明函数,我们将函数插入到index.php中的自动加载之前,

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We'll simply require it
| into the script here so that we don't have to worry about manual
| loading any of our classes later on. It feels great to relax.
|
*/
require __DIR__.'/../app/Helpers/localization.php'; <-- yes this file
require __DIR__.'/../vendor/autoload.php';

这对于网站以及如果我们使用SomeJob::dispatchNow()(不是异步)执行作业,都可以正常工作

但是,当我们想要执行SomeJob::dispatch()之类的异步工作时,index.php不会被调用,因此从不需要文件,因此函数也不需要。 (或者我错了吗?)

我尝试使用composer.js自动加载

"autoload": {
    "psr-4": {
        "App\\": "app/"
    },
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "files": [
        "app/Helpers/helpers.php", <-- works fine
        "app/Helpers/Localization.php" <-- it does include tho
    ]
},

现在在文件中,我们使用if (! function_exists('__')),但此时该函数已经声明,在网站本身上也无效。

简而言之,在index.php上执行require只能直接在网站上使用,而不能在异步作业上使用,这是因为在队列执行作业时永远不会调用index.php。

使用作曲家自动加载功能不适用于网站或工作,因为在我们声明该功能之前,Laravel已经声明了该功能。

所以我应该在哪里要求文件/声明功能,以便网站和异步作业都可以使用我们的功能版本。

P.S。我知道我的英语水平不是很好,所以如果有任何不清楚的地方,或者即使我错过任何信息,也请问我,我会尝试对帖子进行更清晰的编辑。

1 个答案:

答案 0 :(得分:0)

您可以将函数定义添加到laravel bootstrap/app.php的引导文件的开头

或者(由于我怀疑SomeJob::dispatch()使用了工匠),您可以在index.phpartisan中要求文件

#!/usr/bin/env php
<?php

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/
require __DIR__.'/app/Helpers/localization.php';
require __DIR__.'/vendor/autoload.php';

$app = require_once __DIR__.'/bootstrap/app.php';