Мой код не работает вне вспомогательной функции laravel dd () - PullRequest
1 голос
/ 17 мая 2019

Хорошо .. Я не могу понять, как это могло произойти, но .. мой код

$parser->mpml->images()->where('order', $parser->figureCounter)->first()->getUrl()

не работал только вне вспомогательной функции dd().Выдает

Вызов функции-члена getUrl () при нулевой ошибке.

Внутри

dd($parser->mpml->images()->where('order', $parser->figureCounter)->first()->getUrl());

работает и выдает правильный URLстрока ...?Эта проблема действительно случилась неделю назад, она решила сама, даже я никогда ничего не делаю.Теперь это происходит снова.

Кто-нибудь, у кого есть подобный опыт, поделитесь своими знаниями?

У ошибки должна быть причина, и я не могу найти крошечную подсказку по этому вопросу.


class FigureSubparser extends Subparser {
    public function start($attrs)
    {
        $this->attrs = $attrs;

        try {
            $order = $this->getEngine()->incFigureCounter()->getFigureCounter();
            $url = $this->getEngine()->mpml->images()->where('order', $order)->first()->getUrl();
        } catch (\Throwable $e) {
            dd($e->getMessage());
        }

        return '<img src="'.$url.'"/>';
    }
}

Выше продукции "Call to a member function getImageUrl() on null"


Однако, когда я непосредственно помещаю $url часть в dd(),

class FigureSubparser extends Subparser
{
    public function start($attrs)
    {
        $this->attrs = $attrs;

        // try {
            $order = $this->getEngine()->incFigureCounter()->getFigureCounter();
        //  $mpmlimage = $this->getEngine()->mpml->images()->where('order', $order)->first()->getUrl();
        // } catch (\Throwable $e) {
        //  dd($e->getMessage());
        // }

        dd($this->getEngine()->mpml->images()->where('order', $order)->first()->getUrl());

        return '<img src="'.$url.'"/>';
    }
}

В это время, dd() распечатайте "http://localhost:8000/mpmlimages/NNYIPFxWz3TQGbtLJB2XEt9g8U8X370BarvRQ7oo.jpeg", что я и хотел.

и я прошу прощения за неправильный ответ, что моя версия laravel.Было 5.7.19, а не 5.4.


После решения .. Отчет.

Проблема действительно из цикла.

Во время обработки, потому что xml_parser работает, управляемый событиями, каждый открытый тег делает еще один цикл.

Каждый раз, когда открытый тег является элементом FIGURE, мой пользовательский анализатор запускает FigureSubparser->start().

Проблема в том, если существует родительский объект, которыйне имеет записи изображения, так как я не проверял существование записи изображения, код возвращает ноль.

1 Ответ

2 голосов
/ 17 мая 2019

Вероятно, вы выполняете это в цикле, так что, вероятно, для одного из запрашиваемых вами результатов он ничего не возвращает.Из-за этого Laravel вернет значение null, которое вы затем пытаетесь вызвать методом getUrl().

Вместо этого вы должны проверять, что у вас есть результат перед вызовом метода, например:

if ($record = $parser->mpml->images()->where('order', $parser->figureCounter)->first()) {
    $url = $record->getUrl();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...