Nova以前为我工作。我开始在前端工作,回到Nova时突然不起作用了。我可以登录,但随后会显示所有资源的加载动画,并且未加载数据。
我收到此错误:
Trying to get property of non-object (View: longpath/location.blade.php)
在location.blade.php
@extends('app')
@section('title')
{{ $location->title }}
@endsection
@section('content')
@endsection
奇怪的是,在前端,location.blade.php加载得很好,因为我在$location
中传递了LocationController
变量。没有错误,并且错误日志中没有任何内容。在LocationController
中:
$location = Location::
where('id', $this->location_id)
->first();
return view('location', [
'location' => $location
]);
因此它显示了错误,并且此错误也在日志中。如果我注释掉{{ $location->title }}
,它不再显示错误,但仍未加载任何数据,并且错误日志中没有任何显示。所以我不知道为什么它不加载任何数据。对于我来说,为什么一个(前端)Blade模板会在Nova中产生错误,而在前端却能很好地工作,这也是一个谜。
更新:
如果我在路由/网络中注释掉了该特定路由,Nova将再次起作用。不确定为什么这条路线会影响Nova?
Route::get('/{location_id}/{location_title}', 'LocationController@viewLocation');
如果我重新添加路由,则在我的控制台中会得到:
TypeError: Cannot read property 'length' of undefined
答案 0 :(得分:0)
您的路线有问题,因为:
Route::get('/{location_id}/{location_title}', 'LocationController@viewLocation');
将捕获任何 /foo/bar
URL。
如果您进行php artisan route:list | grep nova
,则会看到Nova的所有路线,并且会发现以下格式的一堆路线:
/nova-api/metrics
/nova-api/cards
/nova-api/search
/nova-api/{resource}
等等。
(换句话说,一堆Nova的路由将被发送到您的LocationController
而不是正确的Nova控制器。)
您可以通过从Nova::routes
文件中删除app/Providers/NovaServiceProvider.php
调用并将其直接放入路由文件中来解决此问题,但是更清洁的解决方案很可能会将您的路由调整为某种形式像/locations/{location_id}/{location_title}
这样不会冲突。通配符的顶级路由往往会引起类似这样的问题。
您也许也可以这样做:
Route::get('/{location_id}/{location_title}', 'LocationController@viewLocation')
->where('location_id', '[0-9]+');
这将使您的路由仅针对数字ID激活,这意味着它不会干扰非数字nova-api
路由。