laravel Невозможно подготовить маршрут... для сериализации. Использование закрытия
Когда я очищаю кеши в своем проекте Laravel 5.2, я вижу это сообщение об ошибке:
[LogicException] Невозможно подготовить маршрут [панель] для сериализации. Использует закрытие.
Я думаю, что это связано с маршрутом
Route::get('/article/{slug}', '[email protected]');
связанный с определенным методом в моем контроллере:
public function slug($slug) {
$article = Article::where('slug',$slug)->first();
$id = $article ->id_article ;
if ( ($article=== null) || (is_null($id)) ) return view('errors/Db');
else return view('detail')->with(array('article'=> $article, 'title'=>'My title - '.$article->title));
}'
Короче говоря, из главного представления я передаю $ slug, то есть ссылку на статью, с $ slug, которая уникальна в базе данных, я идентифицирую запись, а затем передаю ее содержимое в подробное представление.
У меня не было проблем, когда я писал метод, он работал, как шарм, но после того, как я очистил кеши, я получаю эту ошибку, а ссылки в главном представлении не показывают никакого короткого кода.
Где я поступаю неправильно?
Ответы
Ответ 1
Я думаю, что это связано с маршрутом
Route::get('/article/{slug}', '[email protected]');
связанный с определенным методом в моем контроллере:
Нет, это не так. Сообщение об ошибке поступает из команды route:cache
, не уверен, почему очистка кеша вызывает это автоматически.
Проблема - это маршрут, который использует Closure вместо контроллера, который выглядит примерно так:
// Thats the Closure
// v
Route::get('/some/route', function() {
return 'Hello World';
});
Поскольку Closures не могут быть сериализованы, вы не можете кэшировать свои маршруты, когда у вас есть маршруты, которые используют закрытие.
Ответ 2
Если ни один из ваших маршрутов не содержит замыкания, но вы все еще получаете эту ошибку, проверьте
routes/api.php
Laravel добавляет маршрут к файлу auth api по умолчанию в указанный выше файл (я думаю, что он делает это, когда мы вызываем php artisan make:auth
)
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
который может быть прокомментирован или заменен вызовом метода контроллера при необходимости:
Ответ 3
Это определенно ошибка. Laravel предлагает предопределенный код в routs/api.php
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
который не может быть обработан:
php artisan route:cache
Это определенно должно быть исправлено командой Laravel. (проверьте ссылку link),
просто, если вы хотите это исправить, вы должны заменить код route\api.php чем-то вроде:
Route::middleware('auth:api')->get('/user', '[email protected]');
и в UserController поставь этот метод:
public function AuthRouteAPI(Request $request){
return $request->user();
}
Ответ 4
Если кто-то все еще ищет ответ, для меня проблема была в файле route/web.php. Пример:
Route::get('/', function () {
return view('welcome');
});
Это также маршрут, так что да... Просто удалите его, если не нужно, и вы готовы идти!
Вы также должны следовать ответам, представленным выше.
Ответ 5
сольватация, когда мы используем такие маршруты:
Route::get('/', function () {
return view('welcome');
});
laravel называет их Closure, так что вы не можете оптимизировать использование маршрутов, поскольку Closures вы должны направить на контроллер, чтобы использовать php artisan optimize