从Laravel 4迁移到Laravel 5:循序渐进指南
Laravel 5 已经发布,但人们对变化的恐惧依然存在。我们不断听到人们抱怨一些重大的改变,例如新的文件夹结构。我的应用如果执行composer update
会崩溃吗?
本文将指导您如何将现有的Laravel 4应用迁移到Laravel 5,并了解新的文件夹结构。
关键要点
composer.json
文件、更新路由、控制器和视图,以及修改任何自定义代码以使用Laravel 5中的新功能和更改。安装
我现有的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 5在Laravel 4的基础上引入了许多新功能和改进。这些包括新的目录结构、改进的路由、更好的环境配置处理以及新的组件,如Socialite、Elixir和Scheduler。Laravel 5还引入了一个新的命令行界面,称为Artisan,它为常见任务提供许多有用的命令。
Laravel 5引入了一种新的环境配置处理方式。Laravel 5不再使用单个.env.php
文件,而是为每个环境使用一个.env
文件。这使得管理不同环境的不同配置更容易。您可以在.env
文件中设置环境变量,Laravel将自动加载它们。
Laravel 5引入了一个新的目录结构,该结构旨在更直观和灵活。app目录现在是应用程序的根目录,它包含应用程序不同部分的几个子目录,例如Http、Providers和Console。public目录现在是Web服务器的根目录,它包含您的资源,例如图像、JavaScript和CSS文件。
从Laravel 4升级到Laravel 5包含几个步骤。首先,您需要更新您的composer.json
文件以要求最新版本的Laravel。然后,您需要更新应用程序的代码以使用Laravel 5中的新功能和更改。这可能涉及更新您的路由、控制器和视图,以及您编写的任何自定义代码。
Laravel Elixir是Laravel 5中的一个新组件,它为定义基本的Gulp任务提供了一个简洁流畅的API。它支持常见的CSS和JavaScript预处理器,如Sass和CoffeeScript,它还提供了一种方便的方法来版本化和连接您的资源。
Laravel 5引入了一个新的路由系统,它比Laravel 4中的路由系统更灵活和强大。路由现在在app/Http/routes.php
文件中定义,您可以对路由进行分组,为它们应用中间件,甚至为它们命名空间。
Laravel Socialite是Laravel 5中的一个新组件,它提供了一种简单方便的方法来使用OAuth提供程序进行身份验证。它开箱即用地支持多个流行的提供程序,您还可以添加自己的自定义提供程序。
Laravel 5引入了一个新的命令行界面,称为Artisan,它为常见任务提供许多有用的命令。您可以使用Artisan生成样板代码、运行数据库迁移,甚至启动本地开发服务器。
Laravel 5.0引入了一些新功能,包括新的目录结构、改进的路由、更好的环境配置处理以及新的组件,如Socialite、Elixir和Scheduler。它还引入了一个新的命令行界面,称为Artisan。
Laravel 5提供了一个强大的数据库迁移系统,允许您对数据库模式进行版本控制。您可以使用Artisan命令行工具创建迁移,然后使用migrate命令运行它们。这使得在不同环境中应用数据库模式更改变得容易。
以上是Laravel 4至Laravel 5-简单升级指南的详细内容。更多信息请关注PHP中文网其他相关文章!