从 4.1 升级到 4.2 后 Laravel 控制器路由中断

Posted

技术标签:

【中文标题】从 4.1 升级到 4.2 后 Laravel 控制器路由中断【英文标题】:Laravel controller routing broken after upgrading from 4.1 to 4.2 【发布时间】:2017-02-23 14:37:51 【问题描述】:

我有一个 laravel 项目,它在 laravel 4.1.31 上运行良好,现在我的挑战是将该项目迁移到更高版本,比如 5.3。我开始遵循 Laravel 在下面这个链接上提供的升级指南

https://laravel.com/docs/5.3/upgrade#upgrade-4.2

我把 composer.json 上的 laravel 版本改成了 4.2.* 如下图

我的 composer.json 文件


	"require": 
    	"classpreloader/classpreloader": "1.0.2",
    	"d11wtq/boris":"1.0.8",
    	"filp/whoops":"1.0.10",
    	"ircmaxell/password-compat":"1.0.4",
    	"jeremeamia/SuperClosure":"1.0.2",
    	"laravel/framework":"4.2.*",
    	"monolog/monolog":"1.15.0",
    	"nesbot/carbon":"1.17.0",
    	"nikic/php-parser":"v0.9.5",
    	"patchwork/utf8":"v1.1.30",
    	"phpseclib/phpseclib":"0.3.10",
    	"predis/predis":"v0.8.7",
    	"psr/log":"1.0.0",
    	"spipu/html2pdf":"4.5.0",
    	"stack/builder":"1.0.3",
    	"swiftmailer/swiftmailer":"5.4.1",
    	"symfony/browser-kit":"2.4.10",
    	"symfony/console":"2.4.10",
    	"symfony/css-selector":"2.4.10",
    	"symfony/debug":"2.4.10",
    	"symfony/dom-crawler":"2.4.10",
    	"symfony/event-dispatcher":"2.7.3",
    	"symfony/filesystem":"2.7.3",
    	"symfony/finder":"2.4.10",
    	"symfony/http-foundation":"2.4.10",
    	"symfony/http-kernel":"2.4.10",
    	"symfony/process":"2.4.10",
    	"symfony/routing":"2.4.10",
    	"symfony/security-core":"2.4.10",
    	"symfony/translation":"2.4.10",
    	"tappleby/laravel-auth-token":"0.3.4",
    	"tecnickcom/tcpdf":"6.2.12",
		"way/generators": "2.*"
    ,
    "autoload": 
        "files": [
            "app/libraries/DashboardInit.php",
            "app/libraries/MailSmsHandler.php",
            "app/libraries/Twilio.php",
            "app/libraries/class.phpmailer.php",
            "app/libraries/class.smtp.php",
            "app/libraries/php-excel.php"
        ],
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/database/seeds"
        ]
    ,
	"repositories": 
  		"packagist":  "url": "https://packagist.org", "type": "composer" 
	

composer update 成功后,我按照文档向指定的app/config/app.php 文件添加了新的加密默认值。接下来的步骤不适用于我的情况,所以我跳过了它们。

怀着激动的心情,接下来我运行了 composer dump-autoload,然后我又一次又一次地运行了 php artisan dump-autoload :) :)

最后勇敢地用我的项目 url 打开了 chrome :( 它加载了一个我起初不喜欢的页面,一个糟糕的错误页面说

Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_UNKNOWN)

它没有提供有关错误的太多信息。我尝试使用此代码通过我的路由文件进行调试。

Route::get('/login', function()
$environment = App::environment();
    echo $d =  class_exists('DashboardController');
    $d = new DashboardController();
    $c = get_declared_classes();
    sort($c);
    dd($c);
);

通过这个实验,我发现应用程序没有加载 DashboardController 或任何其他控制器。我已经尝试了很多关于作曲家和工匠缓存清除的事情,优化但到目前为止没有运气导致我发布这个问题。

很高兴接受大家提供的所有帮助:)

【问题讨论】:

最新的 laravel 路由已更改。您将拥有路线文件夹。也许那里有问题 你确定吗,因为我认为 laravel 路由文件夹是在版本 5 中引入的,我目前正在升级到 4.2 O.o 哦,我的错。是的,需要先更新到 4.2。等一下 iirc 路由文件夹是在 5.3 中引入的。在此之前它只使用routes.php 【参考方案1】:

使用静态文件详细信息更新我的 composer.json 解决了我的问题,该应用程序已损坏,因为这些 autload-files 类丢失了,这些类用于在自动加载类时实例化其他控制器文件。

感谢您的宝贵时间。很抱歉因为这个愚蠢的问题耽误了您的时间。


"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": 
    "laravel/framework": "4.2.*",
    "tappleby/laravel-auth-token": "0.3.*",
    "spipu/html2pdf": "~4.5"
,
"autoload": 
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/libraries",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ],
     "files": [
        "app/libraries/DashboardInit.php",
        "app/libraries/MailSmsHandler.php",
        "app/libraries/Twilio.php",
        "app/libraries/class.phpmailer.php",
        "app/libraries/class.smtp.php",
        "app/libraries/php-excel.php"
    ]
,
"scripts": 
    "post-install-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ],
    "post-update-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ],
    "post-create-project-cmd": [
        "php artisan key:generate"
    ]
,
"config": 
    "preferred-install": "dist"
,
"minimum-stability": "stable"

【讨论】:

以上是关于从 4.1 升级到 4.2 后 Laravel 控制器路由中断的主要内容,如果未能解决你的问题,请参考以下文章

从 Laravel 4.2 升级到 5.0 后获取 POST 的路由未定义错误

Laravel 升级到 4.2 - 需要 mcrypt 扩展

升级到 Laravel 4.1 时遇到问题

升级到 Laravel 4.1 报错

将 EXTJS 4.1 升级到 4.2... _incr_ 在 Ext.util.Observable 中未定义

脚本 php artisan clear-compiled 处理 pre-update-cmd 事件返回错误(Laravel 4.1 升级)