设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Laravel 5.0 发布 新版本特性详解

发布时间:2022-07-27 12:55 所属栏目:121 来源:互联网
导读:
导读:这篇文章主要介绍了Laravel 5.0 发布 新版本特性详解,本文讲解了目录结构、Contracts、路由缓存、路由中间、控制器方法注入、认证脚手架等新特性,需要的朋友可以参考下 译注: 期待 Laravel 5.0 已经很久很久了, 之前跳票说要到今年一月份发布. 从一月份就一
  这篇文章主要介绍了Laravel 5.0 发布 新版本特性详解,本文讲解了目录结构、Contracts、路由缓存、路由中间、控制器方法注入、认证脚手架等新特性,需要的朋友可以参考下
 
  译注: 期待 Laravel 5.0 已经很久很久了, 之前跳票说要到今年一月份发布. 从一月份就一直在刷新官网和博客, 始终没有更新的消息, 前几天终于看到官网文档切换到了 5.0 版. 新版本带来了众多令人激动的新特性, 尤其是定时任务队列和表单请求两个特性, 光看一下更新说明中的简单介绍都忍不住要上手尝试了. 今天总算抽出一点时间把官方的新特性说明文档简单地翻译了一下, 希望所有喜欢 Laravel 框架的朋友都能感受到这个版本带来的激动人心的改变. 当然, 如果你需要的是 Phalcon 那样的性能, 那它肯定不是你需要的. 如果你是因为虚拟主机不支持 php 5.4 而不能享受 Laravel, 那你还不扔了你的虚拟主机??? 阿里云/腾讯云/linode... VPS的选择不要太多...
 
  Laravel 5.0
 
  Laravel 5.0 引入了全新的项目目录结构. 新的目录结构更有利于用 Laravel 来创建应用. 5.0 版从头到尾都采用了新的 PSR-4 自动加载标准. 以下是 5.0 版主要的新特性:
 
  目录结构
 
  以前版本中的 app/models 目录被整个移除. 如今你可以直接把代码放在 app 目录下, 该目录下的所有代码默认会被组织到 app 命名空间. 这个命名空间是可以通过新增加的 Artisan 命令 app:name 来修改的.
 
  Controllers, middleware 和 requests (Laravel 5.0 新增加的一种类) 被组织到 app/Http 目录, 因为他们都是与你应用的 HTTP 传输层相关的类. 与之前把所有路由过滤器放到单一的 filters 文件下不同, 现在所有的 middleware (类似之前的 route filter) 被分别存放到各自自己的类文件中.
 
  新版本中增加了一个 app/Providers 目录来代替之前 4.x 版本的 app/start 文件. 这些 service providers 为应用提供各种各样的引导方法, 比如错误处理, 日志记录, 路由加载等. 除此之外你当然也可以创建额外的 service providers.
 
  应用的语言文件和视图被移到了 resources 目录.
 
  Contracts
 
  Laravel 的所有主要组件都实现了存放在 illuminate/contracts 仓库中的接口. 该仓库没有额外的依赖项. 拥有这样一个方便的, 集中存放的接口集合, 你就可以很容易地通过它来对 Laravel Facades 进行解耦和依赖注入方面的选择和修改.
 
  了解有关 contracts 的更多信息, 可以查看它的完整文档.
  路由缓存
 
  如果你的应用由各种各样的控制器路由 (controller routes) 组成, 你可以利用新增的 Artisan 命令 route:cache 大幅度提升路由的注册速度. 这在路由数量超过 100 个的应用中尤其有效, 可以 大幅度 提升整个应用在路由部分的速度.
 
  路由中间件 (Route Middleware)
 
  在 4.0 版风格的路由 "过滤器" 基础上, 新版 5.0 已经支持 HTTP 中间件, Laravel 自带的 "authentication" 和 "filters" 已经被转换成中间件. 中间件为所有类型的过滤器提供了单一接口, 你可以很容易地对请求进行审查和拒绝.
 
  了解有关中间件的更多信息, 可以查看它的完整文档.
 
  控制器方法注入
 
  除了现有的构造器注入以外, 在新版本中还可以在控制器方法中的依赖项进行类型约束. IoC container 会自动注入依赖项, 即使在路由包含其它参数的时候也是.
 
  代码如下:
  public function createPost(Request $request, PostRepository $posts)
  {
  //
  }
  认证脚手架
  
  用户注册, 认证以及密码重置控制器已经内置在 5.0 版的网站框架中, 除了控制器以外, 还有简单的视图, 存放在 resources/views/auth 目录. 除此之外, 网站初始框架中还包含了一个 "users" 表的 migration 文件. 这些简单的资源帮助开发者不用在用户认证功能上耗费大量时间. 认证相关的页面可以通过 auth/login 和 auth/register 这两个路由访问. App/Services/Auth/Registrar 服务负责处理创建和认证用户.
 
  事件对象
 
  在新版本中, 你可以把事件定义成对象而不是字符串. 看下面的例子:
 
  代码如下:
  class PodcastWasPurchased {
 
  public $podcast;
 
  public function __construct(Podcast $podcast)
  {
  $this->podcast = $podcast;
  }
 
  }
  这个事件可以这样调用:
  
  Event::fire(new PodcastWasPurchased($podcast));
  当然, 你的事件处理程序收到的也不再是一个数据列表, 而是一个事件对象:
 
  代码如下:
  class ReportPodcastPurchase {
 
  public function handle(PodcastWasPurchased $event)
  {
  //
  }
 
  }
  了解有关事件的更多信息, 可以查看它的完整文档.
 
  命令/队列
 
  在 4.0 版支持的任务队列基础上, 5.0 支持把任务队列定义为简单的命令对象. 这些命令存放在 app/Commands 目录. 下面是一个简单的命令示例:
 
  代码如下:
  class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued {
 
  use SerializesModels;
 
  protected $user, $podcast;
 
  /**
  * 创建新的命令实例
  *
  * @return void
  */
  public function __construct(User $user, Podcast $podcast)
  {
  $this->user = $user;
  $this->podcast = $podcast;
  }
 
  /**
  * 执行命令
  *
  * @return void
  */
  public function handle()
  {
  // 处理购买播客视频的逻辑
 
  event(new PodcastWasPurchased($this->user, $this->podcast));
  }
 
  }
  Laravel 的基础控制器 (base controller) 使用了新的 DispatchesCommands 特性, 允许你很方便地监控命令的执行:

  $this->dispatch(new PurchasePodcastCommand($user, $podcast));
  当然, 你不仅可以把命令用于任务队列(非同步执行), 也可以用于同步任务. 事实上, 把你的应用需要执行的复杂任务封装成命令是一个很好的选择. 了解有关命令的更多信息, 可以查看命令桥的详细文档.
 
  数据库队列
 
  新版 Laravel 包含 database 队列驱动, 提供简单的, 本地的队列驱动, 无需安装额外的包. (译注:比如让不支持事务的数据库进行类似事务的数据操作)。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读