Laravel 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

Странно то, что в front-end location.blade.php загружается отлично, когда я передаю $location переменная в LocationController, Нет ошибок и ничего в журнале ошибок. В LocationController:

$location = Location::
  where('id', $this->location_id)
  ->first();

return view('location', [
  'location' => $location
]);

Так что это показывает ошибку, и эта ошибка также в журналах. Если я закомментирую {{ $location->title }}больше не выдает ошибку, но все равно не загружает никаких данных, и ничего не отображается в журнале ошибок. Так что я понятия не имею, почему он не загружает какие-либо данные. Для меня также загадка, почему (внешний интерфейс) шаблон Blade будет генерировать ошибку в Nova, в то время как он отлично работает на внешнем интерфейсе.

Обновить:

Если я закомментирую этот конкретный маршрут в маршрутах / сети, Nova снова будет работать. Не уверен, почему этот маршрут влияет на Нову?

Route::get('/{location_id}/{location_title}', 'LocationController@viewLocation');

Если я добавлю маршрут обратно, в моей консоли я получу:

TypeError: Cannot read property 'length' of undefined

1 ответ

Решение

Ваш маршрут проблематичен, потому что:

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::routes вызвать из app/Providers/NovaServiceProvider.php файл и положить его в ваши файлы маршрутов напрямую, но более чистое решение, скорее всего, настроить ваш маршрут, чтобы быть что-то вроде /locations/{location_id}/{location_title} это не собирается конфликтовать. Маршрутные маршруты верхнего уровня имеют тенденцию вызывать подобные проблемы.

Вы также можете сделать это:

Route::get('/{location_id}/{location_title}', 'LocationController@viewLocation')
   ->where('location_id', '[0-9]+');

Это сделает ваш маршрут активированным только для числовых идентификаторов, что означает, что он не будет мешать нечисловым nova-api маршруты.

Другие вопросы по тегам