Laravel 5
最后更新于 作者: Eric L. Barnes
早在 9 月,Taylor Otwell 就表示 Laravel 4.3 将被重命名为 Laravel 5,以反映目录更改和其他有趣的举措。自那次公告以来,人们对 Laravel 5 的兴奋之情日益高涨,而“其他有趣的举措”则转变为近二十项新功能,旨在帮助开发人员提高工作效率。
一些人 推迟了升级,耐心地在旁边观望。其他人则直接投入,几个月来一直在使用开发分支,辛辛苦苦地查看提交内容,查找重大更改。
但这一切都将随着 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 的过程。我们都讨厌处理 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 Scheduler
Laravel Scheduler 旨在简化需要通过 CRON 运行的任务。您只需设置一个调用 artisan schedule:run
的 cron 作业,并将其计划为每分钟运行一次。
设置 cron 后,您可以以简洁友好的方式安排任何任务运行。它消除了记住 cron 调度的痛苦,而且非常简单。这些计划是在您的“app/Console/Commands”目录中创建的。
以下是一个示例任务
$schedule->command('cache:clear') ->hourly() ->sendOutputTo($filePath)
当此功能发布时,它收到了很多褒贬不一的反应。我属于认为它很棒的那一派。我喜欢 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
转换为 bool 类型。选项将被存储为 json 并自动转换为数组。
当您使用 JavaScript 并且需要将它们匹配起来时,这非常棒。
Whoops 不再存在
Laravel 4 包含一个名为 Whoops 的错误处理程序。它已从 Laravel 5 中删除,但如果您想找回它,请参阅 将 Whoops 带回 Laravel 5。
包和 Workbench
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 相关的所有其他内容。
2015 年将是 Laravel 世界激动人心的一年,我期待着与您保持联系!