Задание очереди Laravel не загружает файл в
Я немного застрял с загрузкой в файл для Laravel Queue/Job
Я использую Laravel Queue / Async Job (давайте назовем это работой для простоты использования)
Оке позволяет начать с самого начала, у нас есть собственная функция перевода, и мы также назвали ее __()
как и по умолчанию в 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('__'))
но в этот момент функция уже объявлена, на самом сайте она тоже не работает.
Короче говоря, require в index.php работает только с веб-сайта напрямую, а не из асинхронных заданий, потому что index.php никогда не вызывается, когда очередь выполняет задание.
Использование автозагрузки композитора не работает ни для веб-сайта, ни для работы, потому что функция уже объявлена Laravel до того, как мы объявим ее.
Так что, где я должен требовать файл / объявление функции, чтобы и веб-сайт, и асинхронное задание могли использовать нашу версию функции.
PS Я знаю, что мой английский не настолько хорош, так что если что-то неясно или даже если я пропускаю какую-либо информацию, пожалуйста, спросите меня, и я постараюсь отредактировать пост, чтобы быть более понятным.
1 ответ
Вы можете добавить определение своей функции в начало файла начальной загрузки laravel bootstrap/app.php
Или (так как я подозреваю SomeJob::dispatch()
использовать ремесленник), вы можете запросить файл в 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';