嗯..我不知道怎么回事,但是..我的代码
$parser->mpml->images()->where('order', $parser->figureCounter)->first()->getUrl()
不能仅在dd()
帮助程序功能之外工作。它产生
在出现空错误时调用成员函数getUrl()。
在里面,
dd($parser->mpml->images()->where('order', $parser->figureCounter)->first()->getUrl());
它可以正常工作并产生适当的网址字符串...?这个问题实际上是在一周前发生的,即使我什么也没做,它还是可以解决。现在,这再次发生。
任何有类似经验的人,你会分享你的知识吗?
错误一定是有原因的,我对此没有一点头绪。
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()
。
问题是,如果存在没有图像记录的父对象,由于我没有检查图像记录的存在,因此代码返回null。
答案 0 :(得分:2)
听起来您可能是在一个循环中运行它,所以对于您查询的结果之一来说,它可能没有返回任何内容。因此,Laravel将返回null,然后您尝试在其上调用getUrl()
方法。
相反,在调用该方法之前,您应该检查是否有结果,例如:
if ($record = $parser->mpml->images()->where('order', $parser->figureCounter)->first()) {
$url = $record->getUrl();
}