我有一个相当大的网站,我最近转移到另一台服务器,在一些虚拟机中,它们都位于负载均衡器后面。从那以后,我一直在日志中发现这些错误。
Fatal error: Call to a member function has() on array (View: /var/www/sites/lotpro/public_html/resources/views/home.blade.php)
违规行如下所示:
<div class="form-group margin-sm {{ $errors->has('new_zip') ? 'has-error' : '' }}">
请记住这是Laravel 5.1,当所有内容仍然存储在单个routes.php
文件中而不是在web.php
和api.php
之间分开时,我发现这很奇怪,我不必担心为我的路由提供正确的中间件,因为它已经全局应用。 5.1的文档清楚地说明$errors
变量将始终可用,并且将是MessageBag
的实例。但在这种情况下,我能够确定它是一个空数组。
在其他文件中也有类似的情况,我也在检查$errors
变量,所以我认为代码本身没有任何问题,因为我无法重现这个问题。
我确定文件会话驱动程序可能存在一个问题,即将网站置于负载均衡器后面并在多个虚拟机上运行,因此我启动了共享Redis服务器,现在我使用redis会话驱动程序和它似乎在很大程度上解决了这个问题。不幸的是,它仍然非常间歇性地存在。
每当我们在$errors
对象上调用一个方法时,我首先可以检查它是否是一个对象,但这更像是将问题扫到地毯下并且实际上并没有解决根本问题有一个有效的会议。