Laravel Nova未加载任何资源,刀片错误

时间:2018-12-11 16:07:51

标签: laravel laravel-5 laravel-nova

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

1 个答案:

答案 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路由。