Задание очереди 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';
Другие вопросы по тегам