搜索
首页后端开发php教程Laravel 4至Laravel 5-简单升级指南

从Laravel 4迁移到Laravel 5:循序渐进指南

Laravel 5 已经发布,但人们对变化的恐惧依然存在。我们不断听到人们抱怨一些重大的改变,例如新的文件夹结构。我的应用如果执行composer update会崩溃吗?

本文将指导您如何将现有的Laravel 4应用迁移到Laravel 5,并了解新的文件夹结构。

Laravel 4 to Laravel 5 - The Simple Upgrade Guide

关键要点

  • 从Laravel 4升级到Laravel 5包含多个步骤,包括更新composer.json文件、更新路由、控制器和视图,以及修改任何自定义代码以使用Laravel 5中的新功能和更改。
  • Laravel 5引入了许多新功能和改进,例如新的目录结构、改进的路由、更好的环境配置处理以及新的组件,如Socialite、Elixir和Scheduler。
  • 升级到Laravel 5的过程可能很复杂且耗时,具体取决于应用程序的大小。但是,没有必要升级到新的文件夹结构;您可以保留旧的结构,只更新composer依赖项,但这并不是推荐的做法。

安装

我现有的Laravel 4应用程序是一个之前的关于使用Google Analytics API的文章中的演示程序。该应用程序代码不多,但足以用于我们的教程。

让我们首先在计算机上安装Laravel 5,并创建一个临时文件夹来保存我们的Laravel 4版本的应用程序。

composer create-project laravel/laravel --prefer-dist

我更喜欢通过composer安装Laravel,但您可以访问文档以了解更多关于Laravel安装程序的信息。

您可以使用存储库中的Vagrant虚拟机,或使用Homestead Improved。如果一切顺利,您应该会看到Laravel 5的欢迎页面。

配置文件

旧的app/config文件夹现在位于应用程序的根目录下,因此我们必须将app/config/analytics.php移动到config/analytics.php。凭据直接粘贴到文件中,所以为什么不使用环境变量呢?

// config/analytics.php

return [
  'app_name'          => env('app_name'),
  'client_id'         => env('client_id'),
  'client_secret'     => env('client_secret'),
  'api_key'           => env('api_key')
];
<code>// .env

app_name='YOUR APP NAME'
client_id='YOUR CLIENT ID'
client_secret='CLIENT SECRET'
api_key='API KEY'</code>

.env文件会自动加载,可用于将本地环境配置与生产环境、测试环境等分开。

路由

Laravel 4路由注册在app/routes.php中。在Laravel 5中,所有与HTTP相关的部分都分组在app/Http文件夹下,包括路由,因此让我们将app/routes.php移动到app/Http/routes.php

过滤器

Laravel 5已从过滤器迁移到中间件,因此如果您的路由中包含任何过滤器,请确保将其更改为中间件。

Route::get('/report', ['middleware' => 'auth', function() {
    //
}]);

如果您有自定义过滤器,您可以将其迁移为中间件。我的路由中使用了一个GoogleLogin中间件,实现如下所示。

composer create-project laravel/laravel --prefer-dist
// config/analytics.php

return [
  'app_name'          => env('app_name'),
  'client_id'         => env('client_id'),
  'client_secret'     => env('client_secret'),
  'api_key'           => env('api_key')
];
<code>// .env

app_name='YOUR APP NAME'
client_id='YOUR CLIENT ID'
client_secret='CLIENT SECRET'
api_key='API KEY'</code>

默认情况下会添加CRSF保护中间件。如果要删除它,您可以转到app/Http/Kernel.php文件并注释掉相应的行。

控制器

因为我们的控制器被认为是HTTP逻辑的一部分,我们需要将app/controllers/*移动到app/Http/Controllers并使用App\Http\Controllers命名空间。您需要修复的最后一个问题是将BaseController更改为Controller类。

如果您不喜欢App根命名空间,您可以使用以下artisan命令全局更改它。

Route::get('/report', ['middleware' => 'auth', function() {
    //
}]);

迁移

我们的Google Analytics应用程序没有任何本地数据库交互,但升级过程值得一提。

app/database目录现在位于/database文件夹内,您只需要将文件移动到那里即可。该目录已经包含一个users表和一个password_resets表,您可以根据需要删除或更新它们。

模型

Laravel 4中的models文件夹消失了,Laravel 5直接在app文件夹中放置User模型作为示例。您也可以将您的模型复制到那里,并使用App命名空间。

但是,如果您不喜欢将模型放在那里的想法,您可以在app目录下创建一个名为Models的新文件夹,但不要忘记使用App\Models命名空间为您的类命名空间。

// app/Http/Middleware/GoogleLogin.php

class GoogleLogin
{
  public function handle($request, Closure $next)
  {
    $ga = \App::make('\App\Services\GoogleLogin');
    if (!$ga->isLoggedIn()) {
      return redirect('login');
    }

    return $next($request);
  }
}

应用程序服务

我们的src文件夹包含一个GA_Service和一个GA_Utils类。如果我们认为它们是服务,我们可以将它们放在app/Services中。否则,我们可以创建一个名为app/GA的新文件夹,我们将在此处存储我们的服务类。这将导致问题,因为我们一开始没有使用PSR-4自动加载,因此我们需要使用正确的新的命名空间更新控制器中的类引用。

视图

应用程序视图从app/views文件夹移动到resources/views文件夹。

resources文件夹还包含用于应用程序本地化的lang文件夹,以及用于前端资源的assets文件夹。Laravel 5引入了Elixir,它将Gulp任务运行器适配到Laravel开发环境。

Composer

确保您复制应用程序的composer依赖项并进行任何必要的升级。对于我们的演示,我将把"google/apiclient": "1.1.*"移动到新的composer.json中,并执行composer update以反映这些更改。

表单和HTML

illuminate/html包已从Laravel 5的默认安装中移除,您需要单独安装它。

要将HTML辅助函数带回到您的项目中,您需要将"illuminate/html": "5.0.*"包添加到您的composer.json中并运行composer update,然后您需要将'Illuminate\Html\HtmlServiceProvider'添加到您的config/app.php提供程序数组中。如果您想在blade模板中使用Html和Form外观,您可以将以下外观添加到您的config/app.php外观数组中。

composer create-project laravel/laravel --prefer-dist

结论

升级到Laravel 5的过程的复杂性和持续时间始终取决于您的应用程序的大小,对于您的特定情况,该过程可能比此示例长得多。在本文中,我们试图解释常见的过程,该过程应该可以处理大多数(如果不是全部)需要更改的内容。

您不必升级到新的文件夹结构,您可以保留旧的结构,只更新您的composer依赖项,但这并不是推荐的做法。如果您有任何问题或意见,请务必在下面发布。有关更多信息,请参阅完整的版本升级指南。

Laravel 4到Laravel 5升级指南常见问题解答(FAQs)

Laravel 4和Laravel 5的主要区别是什么?

Laravel 5在Laravel 4的基础上引入了许多新功能和改进。这些包括新的目录结构、改进的路由、更好的环境配置处理以及新的组件,如Socialite、Elixir和Scheduler。Laravel 5还引入了一个新的命令行界面,称为Artisan,它为常见任务提供许多有用的命令。

如何在Laravel 5中处理环境配置?

Laravel 5引入了一种新的环境配置处理方式。Laravel 5不再使用单个.env.php文件,而是为每个环境使用一个.env文件。这使得管理不同环境的不同配置更容易。您可以在.env文件中设置环境变量,Laravel将自动加载它们。

Laravel 5中的新目录结构是什么?

Laravel 5引入了一个新的目录结构,该结构旨在更直观和灵活。app目录现在是应用程序的根目录,它包含应用程序不同部分的几个子目录,例如Http、Providers和Console。public目录现在是Web服务器的根目录,它包含您的资源,例如图像、JavaScript和CSS文件。

如何从Laravel 4升级到Laravel 5?

从Laravel 4升级到Laravel 5包含几个步骤。首先,您需要更新您的composer.json文件以要求最新版本的Laravel。然后,您需要更新应用程序的代码以使用Laravel 5中的新功能和更改。这可能涉及更新您的路由、控制器和视图,以及您编写的任何自定义代码。

什么是Laravel Elixir以及如何使用它?

Laravel Elixir是Laravel 5中的一个新组件,它为定义基本的Gulp任务提供了一个简洁流畅的API。它支持常见的CSS和JavaScript预处理器,如Sass和CoffeeScript,它还提供了一种方便的方法来版本化和连接您的资源。

如何使用Laravel 5中的新路由系统?

Laravel 5引入了一个新的路由系统,它比Laravel 4中的路由系统更灵活和强大。路由现在在app/Http/routes.php文件中定义,您可以对路由进行分组,为它们应用中间件,甚至为它们命名空间。

什么是Laravel Socialite以及如何使用它?

Laravel Socialite是Laravel 5中的一个新组件,它提供了一种简单方便的方法来使用OAuth提供程序进行身份验证。它开箱即用地支持多个流行的提供程序,您还可以添加自己的自定义提供程序。

如何使用Laravel 5中的新Artisan命令?

Laravel 5引入了一个新的命令行界面,称为Artisan,它为常见任务提供许多有用的命令。您可以使用Artisan生成样板代码、运行数据库迁移,甚至启动本地开发服务器。

Laravel 5.0中的新功能是什么?

Laravel 5.0引入了一些新功能,包括新的目录结构、改进的路由、更好的环境配置处理以及新的组件,如Socialite、Elixir和Scheduler。它还引入了一个新的命令行界面,称为Artisan。

如何在Laravel 5中处理数据库迁移?

Laravel 5提供了一个强大的数据库迁移系统,允许您对数据库模式进行版本控制。您可以使用Artisan命令行工具创建迁移,然后使用migrate命令运行它们。这使得在不同环境中应用数据库模式更改变得容易。

以上是Laravel 4至Laravel 5-简单升级指南的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
您如何在PHP中创建和使用接口?您如何在PHP中创建和使用接口?Apr 30, 2025 pm 03:40 PM

本文解释了如何创建,实施和使用PHP中的接口,重点关注其对代码组织和可维护性的好处。

crypt()和password_hash()有什么区别?crypt()和password_hash()有什么区别?Apr 30, 2025 pm 03:39 PM

本文讨论了PHP中的crypt()和password_hash()之间的差异,以进行密码哈希,重点介绍其实施,安全性和对现代Web应用程序的适用性。

如何防止PHP中的跨站点脚本(XSS)?如何防止PHP中的跨站点脚本(XSS)?Apr 30, 2025 pm 03:38 PM

文章讨论了通过输入验证,输出编码以及使用OWASP ESAPI和HTML净化器之类的工具来防止PHP中的跨站点脚本(XSS)。

PHP中的自动加载是什么?PHP中的自动加载是什么?Apr 30, 2025 pm 03:37 PM

自动加载PHP会在需要时自动加载类文件,从而通过减少内存使用和增强代码组织来提高性能。最佳实践包括使用PSR-4和有效组织代码。

什么是PHP流?什么是PHP流?Apr 30, 2025 pm 03:36 PM

PHP流通过一致的API统一处理文件,网络插座和压缩格式等资源的处理,从而提高复杂性并增强代码灵活性和效率。

可以使用PHP上传的文件的最大大小是多少?可以使用PHP上传的文件的最大大小是多少?Apr 30, 2025 pm 03:35 PM

本文讨论了在PHP中管理文件上传大小的管理,重点是2MB的默认限制以及如何通过修改PHP.INI设置来增加它。

PHP中的无效类型是什么?PHP中的无效类型是什么?Apr 30, 2025 pm 03:34 PM

本文讨论了PHP 7.1中引入的PHP中的无效类型,允许变量或参数为指定类型或NULL。它突出显示了诸如提高可读性,类型安全性和明确意图的好处,并解释了如何声明

unset()和unlink()函数之间有什么区别?unset()和unlink()函数之间有什么区别?Apr 30, 2025 pm 03:33 PM

本文讨论了unset()和unlink()功能在编程中的差异,重点关注其目的和用例。 unset()从内存中删除变量,而unlink()从文件系统中删除文件。两者都对效率至关重要

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器