Laravel 队列作业未加载文件
Laravel queue job does not load file in
我有点难以加载 Laravel Queue/Job
的文件
我正在使用 Laravel queued/async 个作业(为了方便起见,我们称之为作业)
好的让我们从头开始,我们有自己的翻译功能,我们也将其命名为__()
,就像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
试过了
"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。
使用 composer autoload 对网站或工作都不起作用,因为在我们声明它之前 Laravel 已经声明了该功能。
那么我应该在哪里要求 file/declare 函数,以便网站直接和异步作业都可以使用我们版本的函数。
P.S。我知道我的英语不是很好,所以如果有任何不清楚的地方,或者即使我遗漏了任何信息,请问我,我会尝试编辑 post 以使其更清楚。
您可以将函数定义添加到 laravel bootstrap/app.php
的 bootstrap 文件的开头
或者(因为我怀疑 SomeJob::dispatch()
使用 artisan),您可以在 index.php
和 artisan
中要求您的文件
#!/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';
我有点难以加载 Laravel Queue/Job
的文件我正在使用 Laravel queued/async 个作业(为了方便起见,我们称之为作业)
好的让我们从头开始,我们有自己的翻译功能,我们也将其命名为__()
,就像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
"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。
使用 composer autoload 对网站或工作都不起作用,因为在我们声明它之前 Laravel 已经声明了该功能。
那么我应该在哪里要求 file/declare 函数,以便网站直接和异步作业都可以使用我们版本的函数。
P.S。我知道我的英语不是很好,所以如果有任何不清楚的地方,或者即使我遗漏了任何信息,请问我,我会尝试编辑 post 以使其更清楚。
您可以将函数定义添加到 laravel bootstrap/app.php
或者(因为我怀疑 SomeJob::dispatch()
使用 artisan),您可以在 index.php
和 artisan
#!/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';