早在 九月,Taylor Otwell 就表示 Laravel 4.3 将被重新命名为 Laravel 5,以反映目录更改和“其他有趣的功能”。自该公告发布以来,对 Laravel 5 的期待不断升温,而“其他有趣的功能”也变成了近二十项新特性,帮助开发者提高效率。
有些人 迟迟没有升级 ,耐心等待着。而其他人则跃跃欲试,几个月来一直在使用 develop 分支,仔细查看提交,寻找重大变更。
但这一切即将结束,因为 Laravel 刚刚宣布 Laravel 5 将在下周正式发布。
#L5。下周。
— Laravel (@laravelphp) 2015 年 1 月 27 日
这三个词引发的热议不无道理。这个版本经过了数月的精心打造,终于准备与世人见面了。
Laravel 5 是一个重大升级,提供了许多新功能,但同时保留了使 Laravel 大获成功的核心功能。
实际上,新特性层出不穷,让人难以尽数。在这篇文章中,我将概述新特性,以及您在下周可以期待的内容。
Laravel 5 目录结构
第一个重大变化是目录结构。app 文件夹进行了重新设计,一些内容被移到了 app 文件夹之外。包括 config、database、storage 和 resources。
app 文件夹内部现在被进一步划分为以下文件夹:
- Commands
- Console
- Events
- Exceptions
- Handlers
- Http
- Providers
- Services
如果您熟悉之前版本的 Laravel,这可能会让您措手不及,但我保证您在使用两天后就能轻松理解和使用它。有关更多信息,请查看 Matt Stauffer 的 这篇文章 。
Blade 的变化
Blade 没有太多改进,但一项 Blade 改变 对于升级来说非常重要。
在 Laravel 4 中,Blade 包含以下两种样式:{{
和 {{{
。双花括号用于原始输出,三花括号用于转义。
现在,双花括号和三花括号都用于转义变量,而新的 {!! $var !!}
用于原始输出。
原始输出的一个常见用例是与表单助手一起使用。
{!! Form::open() !!}
契约
契约是一组接口,定义了框架提供的核心服务。从本质上来说,这相当于框架功能的文档。但它们的作用远不止此,您可以在 官方文档 中找到更多关于它们的信息以及它们如何提供帮助。
命令与事件
命令和事件都进行了改造。此功能在 文档 以及以下资源中都有详细介绍:
外观与助手
外观仍然存在于 Laravel 5 中,但新的助手函数开始取代一些最常用的功能。例如,在 Laravel 4 中,渲染视图需要使用以下代码:
View::make('path.to.view');
现在,只需使用一个简单的函数调用即可:
view('path.to.view');
其他一些助手函数包括:* abort() * action() * app() * app_path() * asset() * 路由 – get()、delete()、put() * back() * redirect() * response() * 等等…
路由
Matt 对这两个主题都进行了详细的讲解,我实在无话可说。请查看他的文章,深入了解这两个主题。
控制器方法注入
Laravel 4 支持控制器构造函数注入。现在,这一功能又向前迈进了一步,您可以在方法中指定任何依赖项的类型提示:
public function store(Request $request)
或者使用任何其他类型提示:
public function taxes(TaxCalculator $tax)
以下是一些深入了解的链接:
身份验证脚手架
默认的身份验证流程已经预先配置好,随时可以使用。启动所有这些功能比以往任何时候都容易。
这引入了两个新的特性:
- AuthenticatesAndRegistersUsers
- ResetsPasswords
最棒的是,您可以使用包含的特性,也可以覆盖特性方法中的任何内容,以自定义您的应用。
Socialite
Laravel Socialite 是一个可选的 Laravel 5.0 包,它简化了 OAuth 处理。这可是我们都讨厌的事情,对吧?目前,Socialite 支持 Facebook、Twitter、Google 和 GitHub。
官方文档 中包含有关实现和流程的更多信息。
Flysystem
下一个重大新特性是包含 Frank de Jonge 的 Flysystem 。如果您不熟悉这个包,它是一个文件系统抽象,允许您轻松地将本地文件系统替换为远程文件系统。
当前包含的适配器有:
- Local
- Amazon Web Services – S3
- Rackspace Cloud Files
这意味着您能够轻松地将文件上传到这些服务中,并且比以往更容易使用外部存储。对于大多数应用来说,我认为这将是一个巨大的时间节省器。
dotenv – 环境检测
Vance Lucas 创建了一个名为 PHP dotenv 的 PHP 包,它可以从 .env 中加载环境变量到 getenv()、$_ENV
和 $_SERVER
中,并自动执行。
Laravel 5 包含此包,以简化环境管理。您无需再编辑 bootstrap/start.php 并自定义 $app->detectEnvironment()
数组。
相反,您只需创建自己的 .env 文件,并根据需要对其进行自定义。然后,在任何配置文件中,您可以使用类似以下的代码:
'database' => env('DB_DATABASE’, 'myproddb'),
您还可以为不同的环境创建自定义文件,例如测试环境。实际上,Laracasts 已经提供了一个示例 behat 集成 ,它已经使用了此功能。
表单请求
表单验证和请求已经被讨论了很多,这是您一定听说过的一个领域。
基本上,身份验证和验证可以被转化为表单请求,并轻松注入。
有关此功能的更多信息,请查看以下两个资源:
Laravel Elixir
Elixir 是一个围绕 gulp 的全新封装,旨在简化资产处理。 无需费心构建自己的 CSS 和 JS 构建系统,您可以使用 Elixir,轻松完成设置并开始使用。
它默认支持您所需的大部分功能:Sass、Less、Coffeescript、JavaScript、文件版本控制以及其他诸多功能。
Laravel 调度器
Laravel 调度器 旨在简化需要通过 CRON 运行的任务。您只需设置一个调用 artisan schedule:run
的 cron 任务,并将其设置为每分钟执行一次。
设置好 cron 后,您可以以简洁友好的方式安排任何任务的运行时间。 它消除了记住 cron 调度方案的困扰,非常简单。 这些调度方案是在您的“app/Console/Commands”目录中创建的。
以下是一个示例任务
$schedule->command('cache:clear') ->hourly() ->sendOutputTo($filePath) ->emailOutputTo('john@doe.com');
此功能发布后,引发了各种褒贬不一的评价。 我认为这太棒了。 我喜欢 cron 任务被版本控制、在我的编辑器中易于查看,最重要的是,用纯英文编写。
$schedule->call('SomeClass@method')->dailyAt('10:00');
新 dd()
大家最喜欢的函数 dd(),即 dump and die(转储并退出),得到了重大改进。 Symfony 发布了 VarDumper 组件,Laravel 现在在幕后使用它。
VarDumper 组件提供遍历任何任意 PHP 变量的机制。 在其基础上,它提供了一个更好的 dump() 函数,您可以使用它来代替 var_dump。
非常有用,我很喜欢它为我们带来了多少额外的功能。 有关更多信息,请参见 Laravel dd 升级。
Eloquent 属性转换
此功能得益于 Dayle Rees 的贡献。 属性转换 允许您将属性转换为其他数据类型。 例如,在您的模型中,添加一个 casts 属性
protected $casts = [ 'is_admin' => 'boolean', 'options' => 'array',];
这将自动将 is_admin
转换为布尔值。 选项将以 JSON 格式存储,并在输出时自动转换为数组。
当您使用 JavaScript 并且需要将它们匹配时,这非常有用。
Whoops 不再存在
Laravel 4 包含一个名为 Whoops 的错误处理程序。 现在已从 Laravel 5 中移除,但如果您想将其恢复,请参见 将 Whoops 还原到 Laravel 5。
包和工作台
Laravel 包系统有一些重大变化。 最显著的变化是,现在已移除 Workbench,转而直接使用 Composer 包。
您可以在 官方文档 中找到有关这些具体更改的更多信息,以及 John in ‘t Hout 编写的教程 加载包视图/语言文件
Psysh
Tinker,用于测试您的代码的 CLI 工具,现在使用 Justin Hileman 编写的 Psysh。
对于不熟悉 Psysh 的人来说,它是一款
用于 PHP 的运行时开发控制台、交互式调试器和 REPL(读入-求值-输出-循环)。
- Psysh 功能强大,以下是部分功能
- 在上下文中读取文档。
doc dd
- list 命令了解您的所有代码(以及其他人的所有代码)。 轻松列出并搜索所有变量、常量、类、接口、特性、函数、方法和属性。
- 轻松显示任何用户区对象、类、接口、特性、常量、方法或属性的源代码。
- 捕获最后一个异常,可以通过
wtf
命令访问。
显示、搜索、保存和重放您的 shell 历史记录。
我相信它还有更多功能,并将成为您武器库中的一款强大工具。
SuperClosure
SuperClosure 是 Jeremy Lindblom 为序列化闭包和匿名函数而编写的库,也是一项新功能。 在幕后,它被 排队的闭包 使用。
新生成器
- Artisan 现在功能更加强大,可以为您生成大量样板代码。 以下是当前可用的一些生成器
-
make:command
— 创建一个新的命令类 -
make:console
— 创建一个新的 Artisan 命令 -
make:controller
— 创建一个新的资源控制器类 -
make:event
— 创建一个新的事件类 -
make:middleware
— 创建一个新的中间件类 -
make:migration
— 创建一个新的迁移文件 -
make:model
— 创建一个新的 Eloquent 模型类 -
make:provider
— 创建一个新的服务提供程序类 -
make:request
— 创建一个新的表单请求类
event:generate
— 生成缺失的事件和处理程序
升级
升级不会像简单的 composer update
那样简单。 由于这是主要版本,您应该预期花费几个小时才能完成所有升级工作。 已经编写了两个指南来帮助您完成此过程。 官方文档 以及 Matt 的升级指南。
接下来去哪里?
与任何框架一样,学习更多内容的最佳场所是官方文档。 之后,订阅 Laravel 时事通讯,它将让您及时了解最新的 Laravel 技巧和教程、Laravel 包 以及与 Laravel 相关的其他所有内容。