Fra*_*sco 43 serialization routes laravel
当我在Laravel 5.2项目中清除缓存时,我看到以下错误消息:
[LogicException]无法为序列化准备路由[面板].使用闭包.
我认为这与路线有关
Route::get('/article/{slug}', 'Front@slug');
Run Code Online (Sandbox Code Playgroud)
与我的控制器中的特定方法相关联:
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));
}`
Run Code Online (Sandbox Code Playgroud)
简而言之,从主视图中我传递$ slug,这是文章的短链接,使用$ slug,这在数据库中是唯一的,我识别记录然后将其内容传递给详细视图.
我写这个方法时没有任何问题,事实上它就像一个魅力,但在我清理缓存后,我得到了这个错误,主视图中的链接没有显示任何短代码.
我哪里做错了?
tka*_*usl 61
我认为这与路线有关
Run Code Online (Sandbox Code Playgroud)Route::get('/article/{slug}', 'Front@slug');
与我的控制器中的特定方法相关联:
不,不是吗.错误消息来自route:cache
命令,不确定为什么清除缓存会自动调用此命令.
问题是使用Closure而不是控制器的路由,它看起来像这样:
// Thats the Closure
// v
Route::get('/some/route', function() {
return 'Hello World';
});
Run Code Online (Sandbox Code Playgroud)
由于无法序列化Closures,因此当您拥有使用闭包的路由时,无法缓存路由.
Man*_*eet 29
如果您的路由都没有包含闭包,但仍然出现此错误,请检查
路线/ api.php
Laravel为上面的文件添加了一个默认的auth api路由(我认为它在我们调用时会这样做php artisan make:auth
)
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Run Code Online (Sandbox Code Playgroud)
如果需要,可以通过调用控制器方法进行注释或替换:
小智 10
这绝对是一个错误.Laravel在route / api.php中提供了预定义的代码
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Run Code Online (Sandbox Code Playgroud)
无法通过以下方式处理:
php artisan route:cache
Run Code Online (Sandbox Code Playgroud)
这肯定应该由Laravel团队解决。(请检查链接),
简单来说,如果您要修复它,则应使用类似以下内容的方法替换route \ api.php代码:
Route::middleware('auth:api')->get('/user', 'UserController@AuthRouteAPI');
Run Code Online (Sandbox Code Playgroud)
并在UserController中放置以下方法:
public function AuthRouteAPI(Request $request){
return $request->user();
}
Run Code Online (Sandbox Code Playgroud)
此问题的实际解决方案是更改 web.php 中的第一行
只需用以下路线替换欢迎路线
Route::view('/', 'welcome');
Run Code Online (Sandbox Code Playgroud)
如果仍然遇到与您相同的错误
检查你的routes/web.php和routes/api.php
Laravel 在 routes/web.php 中带有默认的路由关闭:
Route::get('/', function () {
return view('welcome');
});
Run Code Online (Sandbox Code Playgroud)
和路由/api.php
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Run Code Online (Sandbox Code Playgroud)
如果您删除它,请再次尝试清除路由缓存。
如果您遇到此问题是因为您已将 Laravel <5.8 项目升级到 >=5.8,则您可能已使用 ./vendor/bin/carbon-upgrade 方法按照终端的建议升级项目。在这种情况下,您只需从composer.json文件底部删除以下两个块,然后再次安装composer:
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan optimize"
],
Run Code Online (Sandbox Code Playgroud)
如果有人仍在寻找答案,对我来说问题出在 paths/web.php 文件中。例子:
Route::get('/', function () {
return view('welcome');
});
Run Code Online (Sandbox Code Playgroud)
它也是路线,所以是的...如果不需要,只需将其删除即可开始!您还应该遵循上面提供的答案。
小智 5
当我们使用这样的路由时的解决方案:
Route::get('/', function () {
return view('welcome');
});
Run Code Online (Sandbox Code Playgroud)
laravel 称它们为 Closure,因此您无法优化路由使用作为 Closures 您必须路由到控制器才能使用 php artisan optimize
归档时间: |
|
查看次数: |
59650 次 |
最近记录: |