【问题标题】:How to set route path of Laravel on CentOS7?如何在 CentOS7 上设置 Laravel 的路由路径?
【发布时间】:2019-05-20 16:11:47
【问题描述】:

我创建了 laravel 项目,可以在我的本地 Windows 电脑上正常工作。一旦我上传到 Centos7 服务器(通过 SSH),我所有的路由都不起作用。我试图通过操作来修复,例如清除缓存、删除供应商文件夹并重做安装作曲家,但没有任何帮助。我从日志中抓取如下。

[2018-12-20 13:09:17] local.ERROR: LogicException: Unable to prepare route [api/user] 进行序列化。使用闭包。在 /var/www/html/srp/vendor/laravel/framework/sr$ 堆栈跟踪:

#0 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php(61): Illuminate\Routing\Route->prepareForSerialization()

#1【内部函数】:Illuminate\Foundation\Console\RouteCacheCommand->fire()

#2 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Container/Container.php(508): call_user_func_array(Array, Array)

#3 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Console/Command.php(169): Illuminate\Container\Container->call(Array)

#4 /var/www/html/srp/vendor/symfony/console/Command/Command.php(261): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput) , 对象(符号$

#5 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): Symfony\Component\Console\Command\Command->run(Object(Symfony\组件\控制台\$

#6 /var/www/html/srp/vendor/symfony/console/Application.php(817): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object (Symfony\Com$

#7 /var/www/html/srp/vendor/symfony/console/Application.php(185): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Foundation\Console\RouteCacheCo$

#8 /var/www/html/srp/vendor/symfony/console/Application.php(116): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput) , 对象$

#9 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(121): Symfony\Component\Console\Application->run(Object(Symfony\组件\Co$

#10 /var/www/html/srp/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console \输出$ #11 {主}

非常感谢所有建议,谢谢。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    问题是使用闭包而不是控制器的路由,看起来像这样:

    //                       Thats the Closure
    //                             v 
    Route::get('/some/route', function() {
        return 'Hello World';
    });
    

    由于闭包不能被序列化,当你有使用闭包的路由时,你不能route:cache你的路由。这就是您看到该错误的原因。清除缓存或路由将不起作用,因为这是编译时错误。

    如果您的路线都没有包含闭包,但您仍然收到此错误,请检查

    路由/api.php

    Laravel 为上述文件添加了一个默认的 auth api 路由。

    Route::middleware('auth:api')->get('/user', function (Request $request) {
        return $request->user();
    });
    

    如果需要,可以将其注释掉或替换为对控制器方法的调用

    用控制器替换:

     Route::middleware('auth:api')->get('/user', 'UserController@index');
    

    如果不需要,请注释掉。

    【讨论】:

    • 您好,扎克伯格,web.php 中没有闭包。但我有 user(); })->middleware('auth:api');在 api.php 中
    • @ChaiwatJo 'function (Request $request) {' 是一个闭包。请参阅我在代码示例 1 中的回答,其中显示“这就是闭包”
    • 是的,我的意思是这个 ==> user(); })->middleware('auth:api');在 api.php 中不是 web.api
    • 你指定的路由有一个闭包。请阅读我的回答。你得到的错误是因为你正在使用路由缓存并且它没有序列化 Closures 的使用并且它中断了。它在您收到的错误消息中。请阅读我的回答。我也指定了 api.php。那条路线是一个闭包。摆脱那里的关闭方法,您的代码将运行。
    • 注释掉或用控制器替换路由闭包
    【解决方案2】:

    下面的链接可以给你一个更好的主意,

    laravel Unable to prepare route ... for serialization. Uses Closure

    错误是由于调用了route:cache 命令而导致的,并且您的路由可能在那里有一些关闭,因此请避免route:cache 这可能是真正的原因。

    【讨论】:

    • 我得到了 ==> $ php artisan route:cache 路由缓存已清除! [LogicException] 无法为序列化准备路由 [api/user]。使用闭包。
    • @ChaiwatJo 请使用 'php artisan route:clear' 命令并且不要缓存路由,并检查是否可以在没有缓存的情况下工作?
    • 嗨 Abhishek,我做了 'php artisan route:clear' 但仍然有问题。
    • 那是因为就像我在回答中提到的那样,路由缓存在定义路由时不允许使用闭包。你显然有一个闭包
    猜你喜欢
    • 2016-10-09
    • 2019-04-24
    • 2019-05-20
    • 1970-01-01
    • 2012-03-13
    • 2022-01-02
    • 2014-08-12
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多