【问题标题】:Laravel and blade error still not solvedLaravel 和刀片错误仍未解决
【发布时间】:2016-08-17 21:28:47
【问题描述】:

我只是想展示图片

<img src="{!!DB::table('users')->where('username',$game->initiator)->first()->photo_path!!}" alt="" />

但我得到一个错误

Trying to get property of non-object 

我已经尝试了所有方法,例如删除括号、引号和使用Html::image,但没有找到解决方法。

但是当我将代码更改为

{!!dd(DB::table('users')->where('username',$game->initiator)->first()->photo_path)!!}

{{dd(DB::table('users')->where('username',$game->initiator)->first()->photo_path)}}

我得到一个在数据库中设置的 gravatar url,这个 url 有双引号,例如:-"http://www.gravatar.com/avatar/5478144dd02f370affc2ad70f22af697?s=200&amp;r=pg&amp;d=identicon"

这意味着该链接存在于数据库中,但为什么会出现错误。 我试过了

<img src="{!!url(DB::table('users')->where('username',$game->initiator)->first()->photo_path)!!}" alt="" />

但这对我也不起作用。

另外,当我用用户名替换 $game-&gt;initiator 时,图像会正确显示。那些认为变量$game-&gt;initiator为空的人是错误的,我使用dd()函数查看它是否为空,然后我发现它包含一个用户详细信息。

我无法在控制器中执行此操作,因为我有 1000 多个游戏,并且都有一个要显示图像的启动器和接受器。

编辑:当我在图像之后添加{{dd($game)}} 时,它可以工作并抑制错误,但仍然可以从 html 源查看错误 好像

<script> Sfdump = window.Sfdump || (function (doc) { var refStyle = doc.createElement('style'), rxEsc = /([.*+?^${}()|\[\]\/\\])/g, idRx = /\bsf-dump-\d+-ref[012]\w+\b/, keyHint = 0 <= navigator.platform.toUpperCase().indexOf('MAC') ? 'Cmd' : 'Ctrl', addEventListener = function (e, n, cb) { e.addEventListener(n, cb, false); }; (doc.documentElement.firstElementChild || doc.documentElement.children[0]).appendChild(refStyle); if (!doc.addEventListener) { addEventListener = function (element, eventName, callback) { element.attachEvent('on' + eventName, function (e) { e.preventDefault = function () {e.returnValue = false;}; e.target = e.srcElement; callback(e); }); }; } function toggle(a, recursive) { var s = a.nextSibling || {}, oldClass = s.className, arrow, newClass; if ('sf-dump-compact' == oldClass) { arrow = '&#9660;'; newClass = 'sf-dump-expanded'; } else if ('sf-dump-expanded' == oldClass) { arrow = '&#9654;'; newClass = 'sf-dump-compact'; } else { return false; } a.lastChild.innerHTML = arrow; s.className = newClass; if (recursive) { try { a = s.querySelectorAll('.'+oldClass); for (s = 0; s < a.length; ++s) { if (a[s].className !== newClass) { a[s].className = newClass; a[s].previousSibling.lastChild.innerHTML = arrow; } } } catch (e) { } } return true; }; return function (root) { root = doc.getElementById(root); function a(e, f) { addEventListener(root, e, function (e) { if ('A' == e.target.tagName) { f(e.target, e); } else if ('A' == e.target.parentNode.tagName) { f(e.target.parentNode, e); } }); }; function isCtrlKey(e) { return e.ctrlKey || e.metaKey; } addEventListener(root, 'mouseover', function (e) { if ('' != refStyle.innerHTML) { refStyle.innerHTML = ''; } }); a('mouseover', function (a) { if (a = idRx.exec(a.className)) { try { refStyle.innerHTML = 'pre.sf-dump .'+a[0]+'{background-color: #B729D9; color: #FFF !important; border-radius: 2px}'; } catch (e) { } } }); a('click', function (a, e) { if (/\bsf-dump-toggle\b/.test(a.className)) { e.preventDefault(); if (!toggle(a, isCtrlKey(e))) { var r = doc.getElementById(a.getAttribute('href').substr(1)), s = r.previousSibling, f = r.parentNode, t = a.parentNode; t.replaceChild(r, a); f.replaceChild(a, s); t.insertBefore(s, r); f = f.firstChild.nodeValue.match(indentRx); t = t.firstChild.nodeValue.match(indentRx); if (f && t && f[0] !== t[0]) { r.innerHTML = r.innerHTML.replace(new RegExp('^'+f[0].replace(rxEsc, '\\$1'), 'mg'), t[0]); } if ('sf-dump-compact' == r.className) { toggle(s, isCtrlKey(e)); } } if (doc.getSelection) { try { doc.getSelection().removeAllRanges(); } catch (e) { doc.getSelection().empty(); } } else { doc.selection.empty(); } } }); var indentRx = new RegExp('^('+(root.getAttribute('data-indent-pad') || ' ').replace(rxEsc, '\\$1')+')+', 'm'), elt = root.getElementsByTagName('A'), len = elt.length, i = 0, t = []; while (i < len) t.push(elt[i++]); elt = root.getElementsByTagName('SAMP'); len = elt.length; i = 0; while (i < len) t.push(elt[i++]); root = t; len = t.length; i = t = 0; while (i < len) { elt = root[i]; if ("SAMP" == elt.tagName) { elt.className = "sf-dump-expanded"; a = elt.previousSibling || {}; if ('A' != a.tagName) { a = doc.createElement('A'); a.className = 'sf-dump-ref'; elt.parentNode.insertBefore(a, elt); } else { a.innerHTML += ' '; } a.title = (a.title ? a.title+'\n[' : '[')+keyHint+'+click] Expand all children'; a.innerHTML += '<span>&#9660;</span>'; a.className += ' sf-dump-toggle'; if ('sf-dump' != elt.parentNode.className) { toggle(a); } } else if ("sf-dump-ref" == elt.className && (a = elt.getAttribute('href'))) { a = a.substr(1); elt.className += ' '+a; if (/[\[{]$/.test(elt.previousSibling.nodeValue)) { a = a != elt.nextSibling.id && doc.getElementById(a); try { t = a.nextSibling; elt.appendChild(a); t.parentNode.insertBefore(a, t); if (/^[@#]/.test(elt.innerHTML)) { elt.innerHTML += ' <span>&#9654;</span>'; } else { elt.innerHTML = '<span>&#9654;</span>'; elt.className = 'sf-dump-ref'; } elt.className += ' sf-dump-toggle'; } catch (e) { if ('&' == elt.innerHTML.charAt(0)) { elt.innerHTML = '&hellip;'; elt.className = 'sf-dump-ref'; } } } } ++i; } }; })(document); </script>

【问题讨论】:

  • 错误不在这一行,而是在你的视图中的其他地方,检查堆栈跟踪并获取行号。

标签: php laravel blade


【解决方案1】:

我有类似的问题。 使用 DB,您可以访问数据库中的记录,但它不是模型的实例。 尝试通过模型访问数据,在您的情况下只需使用\App\User::where(.... 并查看是否发生错误。

【讨论】:

    【解决方案2】:

    真正的问题出现是因为我在 users 表中做了一些更改。我将balance 的数据类型从string 更改为bigint,更改后出现上述错误。

    您还应该检查您是否发生过这种情况。

    解决方案:您应该更改迁移文件中的列或创建另一个数据库或转储该表中的值。

    就我而言,我更改了数据库。

    【讨论】:

      【解决方案3】:

      外观应该存在于全局命名空间中。尝试使用:

      {{ \DB::table('users')->where('username', $game->initiator)->first()->photo_path }}
      

      如果没有,您的别名没有正确注册。检查 config/app.php > aliases 并确保其中列出了 DB

      【讨论】:

      • 我检查了我的 config/app.php 并发现那里列出了 DB 并且使用 `` 也无济于事
      • 如果 DB 没有在别名中列出,那么包含查询的 dd 命令将如何工作?
      【解决方案4】:

      错误消息准确地告诉你出了什么问题:你正在尝试获取非对象的属性。

      因为您是方法链接 (DB::table('users')-&gt;where('username',$game-&gt;initiator)-&gt;first()-&gt;photo_path),所以很难确切地看到问题出在哪里,因此您需要逐步检查每个方法调用并找出它失败的地方(它'将返回 null 而不是对象)。

      因此,在您的代码中,开始逐步执​​行这些方法……

      dd(DB::table('users'));
      dd(DB::table('users')->where('username', $game->initiator));
      

      ……以此类推,直到你找出哪个方法返回null而不是一个对象。

      【讨论】:

      • 当我使用dd时,不会出现错误,但如果不使用dd,则会出现错误,我无法在图像源中使用dd
      • 当简单地使用{{dd(DB::table('users')-&gt;where('username',$game-&gt;initiator)-&gt;first()-&gt;photo_path)}}我没有错误
      猜你喜欢
      • 2016-08-16
      • 2017-07-15
      • 2015-10-24
      • 1970-01-01
      • 2018-04-08
      • 2014-11-08
      • 2018-04-26
      • 2016-09-12
      • 2016-08-15
      相关资源
      最近更新 更多