如何从 Laravel 5.2 升级到 5.4?

4
我想把Laravel更新到最新的版本5.4。
但是在Laravel迁移指南中没有直接升级的方法,因此我首先尝试将其迁移到laravel 5.3。
我的项目正在5.2 Laravel版本上运行并尝试升级它。
我按照Laravel迁移指南文档的指导更新了composer.json文件。
并在命令行中运行composer update命令。
我遇到了以下错误。
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Loading composer repositories with package information

更新依赖项(包括 require-dev) 您的要求无法解决安装包的集合。

Problem 1
    - Conclusion: don't install laravel/framework v5.3.31
    - Conclusion: don't install laravel/framework v5.3.30
    - Conclusion: don't install laravel/framework v5.3.29
    - Conclusion: don't install laravel/framework v5.3.28
    - Conclusion: don't install laravel/framework v5.3.27
    - Conclusion: don't install laravel/framework v5.3.26
    - Conclusion: don't install laravel/framework v5.3.25
    - Conclusion: don't install laravel/framework v5.3.24
    - Conclusion: don't install laravel/framework v5.3.23
    - Conclusion: don't install laravel/framework v5.3.22
    - Conclusion: don't install laravel/framework v5.3.21
    - Conclusion: don't install laravel/framework v5.3.20
    - Conclusion: don't install laravel/framework v5.3.19
    - Conclusion: don't install laravel/framework v5.3.18
    - Conclusion: don't install laravel/framework v5.3.17
    - Conclusion: don't install laravel/framework v5.3.16
    - Conclusion: don't install laravel/framework v5.3.15
    - Conclusion: don't install laravel/framework v5.3.14
    - Conclusion: don't install laravel/framework v5.3.13
    - Conclusion: don't install laravel/framework v5.3.12
    - Conclusion: don't install laravel/framework v5.3.11
    - Conclusion: don't install laravel/framework v5.3.10
    - Conclusion: don't install laravel/framework v5.3.9
    - Conclusion: don't install laravel/framework v5.3.8
    - Conclusion: don't install laravel/framework v5.3.7
    - Conclusion: don't install laravel/framework v5.3.6
    - Conclusion: don't install laravel/framework v5.3.5
    - Conclusion: don't install laravel/framework v5.3.4
    - Conclusion: don't install laravel/framework v5.3.3
    - Conclusion: don't install laravel/framework v5.3.2
    - Conclusion: don't install laravel/framework v5.3.1
    - laravelcollective/html v5.4 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - laravelcollective/html v5.4.1 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - laravelcollective/html v5.4.2 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - laravelcollective/html v5.4.3 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - laravelcollective/html v5.4.4 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - laravelcollective/html v5.4.5 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - laravelcollective/html v5.4.6 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - laravelcollective/html v5.4.7 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - laravelcollective/html v5.4.8 requires illuminate/view 5.4.* -> satisfiable by illuminate/view[v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.9].
    - don't install illuminate/view v5.4.0|don't install laravel/framework v5.3.0
    - don't install illuminate/view v5.4.13|don't install laravel/framework v5.3.0
    - don't install illuminate/view v5.4.17|don't install laravel/framework v5.3.0
    - don't install illuminate/view v5.4.19|don't install laravel/framework v5.3.0
    - don't install illuminate/view v5.4.27|don't install laravel/framework v5.3.0
    - don't install illuminate/view v5.4.9|don't install laravel/framework v5.3.0
    - Installation request for laravel/framework 5.3.* -> satisfiable by laravel/framework[v5.3.0, v5.3.1, v5.3.10, v5.3.11, v5.3.12, v5.3.13, v5.3.14, v5.3.15, v5.3.16,
v5.3.17, v5.3.18, v5.3.19, v5.3.2, v5.3.20, v5.3.21, v5.3.22, v5.3.23, v5.3.24, v5.3.25, v5.3.26, v5.3.27, v5.3.28, v5.3.29, v5.3.3, v5.3.30, v5.3.31, v5.3.4, v5.3.5, v5.
3.6, v5.3.7, v5.3.8, v5.3.9].
    - Installation request for laravelcollective/html ~5.4 -> satisfiable by laravelcollective/html[v5.4, v5.4.1, v5.4.2, v5.4.3, v5.4.4, v5.4.5, v5.4.6, v5.4.7, v5.4.8].

我需要在composer.json文件中做哪些额外的修改才能使更新工作?

** 更新:**

这是 composer.json 文件:

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.3.*",
        "twbs/bootstrap": "dev-master",
        "laravelcollective/html": "~5.4",
        "kepex/laravel-crud-generator": "^0.1.4",
        "watson/bootstrap-form": "^1.0",
        "doctrine/dbal": "^2.5",
        "intervention/image": "dev-master",
        "danvuquoc/laravel-kraken": "1.*",
        "barryvdh/laravel-dompdf": "0.8.*",
        "barryvdh/laravel-debugbar": "^2.2",
        "barryvdh/laravel-snappy": "^0.3.0",
        "danielboendergaard/phantom-pdf": "^1.2",
        "h4cc/wkhtmltopdf-i386": "0.12.x",
        "h4cc/wkhtmltoimage-i386": "0.12.x",
        "h4cc/wkhtmltopdf-amd64": "0.12.x",
        "knplabs/knp-snappy": "^0.4.3",
        "wemersonjanuario/wkhtmltopdf-windows": "0.12.2.3",
        "tymon/jwt-auth": "0.5.*",
        "zizaco/entrust": "dev-laravel-5",
        "eluceo/ical": "^0.11.0",
        "jurosh/pdf-merge": "dev-master",
        "torann/geoip": "^1.0",
        "maatwebsite/excel": "~2.1.0",
        "roumen/sitemap": "dev-master",
        "guzzlehttp/guzzle": "^6.2",
        "rackspace/php-opencloud": "dev-master",
         "ellisthedev/laravel-5-robots": "~0.1.0",
        "mpdf/mpdf": "^6.1",
        "matthiasmullie/minify": "^1.3",
        "lullabot/amp": "^1.0.0"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~4.0",
        "symfony/css-selector": "2.8.*|3.0.*|3.1.*",
        "symfony/dom-crawler": "2.8.*|3.0.*|3.1.*"
    },
    "autoload": {
        "classmap": ["database"],
        "files": ["app/Http/helpers.php"],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "classmap": ["tests/TestCase.php"]
    },
    "scripts": {
        "post-root-package-install": ["php -r \"copy('.env.example', '.env');\""],
        "post-create-project-cmd": ["php artisan key:generate"],
        "post-install-cmd": ["Illuminate\\Foundation\\ComposerScripts::postInstall", "php artisan optimize"],
        "post-update-cmd": ["Illuminate\\Foundation\\ComposerScripts::postUpdate", "php artisan optimize"]
    },
    "config": {
        "preferred-install": "dist"
    }
}

2
你需要将dompdf包从0.6.1更新到最新版本。 在你的composer.json文件中更新版本为"dompdf/dompdf": "^0.8" - Hariharan
没戏,伙计。我也试过了。 - Rahul
仍然出现同样的错误吗?还是其他包依赖版本问题? - Hariharan
我已更新错误日志信息,请检查。那些错误已经消失了。现在还有一些剩余。 - Rahul
将"laravelcollective/html": "^5.3"更改为v5.4需要laravel框架v5.4。 - Ruchita Sheth
显示剩余4条评论
4个回答

4

我将Laravel 5.2迁移到了5.6.3,以下是我的步骤:

首先,您需要更新提供者app/Providers/{EventServiceProvider, RouteServiceProvider}.php
它们的boot()方法不应该带参数:

     ...
-    public function boot(DispatcherContract $events)
+    public function boot()
     {
-        parent::boot($events);
+        parent::boot();
     }
     ...

其次,更新您的composer.json文件。这是我的默认配置:
{
  "name": "laravel/laravel",
  "description": "The Laravel Framework.",
  "keywords": [
    "framework",
    "laravel"
  ],
  "license": "MIT",
  "type": "project",
  "require": {
    "php": ">=7.1.3",
    "fideloper/proxy": "~4.0",
    "laravel/framework": "5.6.*",
    "laravel/tinker": "~1.0",
    "laravelcollective/html": "^5.5.0"
  },
  "require-dev": {
    "barryvdh/laravel-debugbar": "^3.1",
    "filp/whoops": "~2.0",
    "fzaninotto/faker": "~1.4",
    "mockery/mockery": "~1.0",
    "nunomaduro/collision": "~2.0",
    "phpunit/phpunit": "~7.0",
    "symfony/thanks": "^1.0",
    "doctrine/dbal": "^2.5"
  },
  "autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
    "psr-4": {
      "App\\": "app/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Tests\\": "tests/"
    }
  },
  "extra": {
    "laravel": {
      "dont-discover": [
      ]
    }
  },
  "scripts": {
    "post-root-package-install": [
      "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
      "@php artisan key:generate"
    ],
    "post-autoload-dump": [
      "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
      "@php artisan package:discover"
    ]
  },
  "config": {
    "preferred-install": "dist",
    "sort-packages": true,
    "optimize-autoloader": true
  },
  "minimum-stability": "dev",
  "prefer-stable": true
}

然后运行 composer update 或者 php composer.phar update

将原始仓库中的 App/Providers/RouteServiceProvider.php 替换为您的版本。

将您的路由从 app/routes/web.php 移动到 routes/web.php(最初,您可能还想复制 Laravel 的原始路由)

用 Laravel 原始仓库中位于 app/Http/Controllers/Auth 文件夹下的 Authentication 控制器替换您的控制器。

注释掉旧的 auth 路由并在 web.php 路由文件中添加 Auth::routes();更多信息)。

从原始仓库中添加 config/hashing.php

运行 php artisan config:cache 重新设置缓存。

最后,更新您的数据库结构:php artisan migrate --seed 并运行应用程序:php artisan serve

Laravel 的原始仓库


今天我们是否不需要做更多的工作就可以从5.2迁移到5.6?我正在寻找一种方法来实现这一点。我看到了从5.2升级到5.3的更新,有很多步骤与您的方法相反。谢谢。 - faty fatoumata
你能提供一篇文章的链接吗? 在我的情况下,我成功地按照上述步骤进行了迁移。 - Leonid Dashko

0
最终,我最终利用了link的优势,因为这些人集成了一切可能的东西。只有我们方面的小改变,而且当他们升级最新版本的laravel时,他们也会在日志中提到。虽然这是付费的,但一次性投资可以节省时间,值得。

0

我认为你需要尝试这个:

你必须先更新 LaravelCollective html package

在你的 composer.json 文件中,将以下内容替换为:

"laravelcollective/html": "5.2.*"

改为:

"laravelcollective/html": "5.4.*"

没戏,伙计,还是出现了同样的错误。但我注意到一件事,错误行数已经减少了。 - Rahul

0

您需要先更新barryvdh/laravel-dompdf包。

在您的composer.json文件中进行以下更改:

首先更改

"laravel/framework": "5.3.*" 到之前的版本

然后再更改

"barryvdh/laravel-dompdf": "^0.6.1",

"barryvdh/laravel-dompdf": "^0.8.0",

然后输入composer update命令

然后更改"laravel/framework": "5.3.*"并再次输入命令

`composer update`

命令


首先,将您的“laravel/framework”更改为旧版本,然后执行composer update命令。这样就可以在没有任何错误的情况下首先更新“barryvdh/laravel-dompdf”包,然后再更改“laravel/framework”的版本为“5.3.*”。 - Ruchita Sheth
让我们只是删除"laravelcollective/html": "~5.4"和"barryvdh/laravel-dompdf": "^0.8.0"这两行,然后运行composer update。 - Ruchita Sheth
使用Composer升级到Laravel 5.3后出现问题?请查看升级指南。 - Ruchita Sheth
您可以从EventServiceProvider、RouteServiceProvider和AuthServiceProvider的boot方法中删除参数。 - Ruchita Sheth
让我们在聊天中继续这个讨论 - Rahul
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接