好的,Laravel 5.x 系列(包括 5.0 至 5.8)引入了多项重要特性和改进:
-
新的目录结构
- 应用核心逻辑默认放置在
app目录下,但子目录结构更清晰:Console:存放 Artisan 命令Http:存放控制器、中间件、请求/响应类Providers:存放服务提供者- 移除了
commands和events目录(命令移至Console/Commands,事件监听器可在Providers或Listeners目录)
- 资源文件(视图、语言文件)移至
resources目录 - 前端资源(JS、CSS、图片)移至
public目录 - 配置文件移至
config目录
- 应用核心逻辑默认放置在
-
路由缓存
- 新增
php artisan route:cache命令,将路由注册编译成单个文件,显著提升路由解析速度(尤其对于大型应用)。 - 使用缓存后,路由文件 (
routes/*.php) 的任何更改需重新生成缓存 (php artisan route:cache)。
- 新增
-
中间件
- 取代了 Laravel 4.x 中的"过滤器"。
- 提供更灵活的方式来过滤 HTTP 请求。可以在路由或控制器中指定。
- 使用
php artisan make:middleware MiddlewareName创建。 - 核心中间件(如认证)已内置。
-
Blade 改进
-
新增
@inject指令,便于在视图中注入服务。例如注入用户仓库:php@inject('users', 'App\Repositories\UserRepository') -
新增
@php指令允许在模板中执行原生 PHP 代码块(需谨慎使用)。
-
-
命令调度器
-
引入
php artisan make:command创建自定义 Artisan 命令。 -
新增
php artisan schedule:run命令和App\Console\Kernel类的schedule方法。 -
允许在代码中定义定时任务(取代 crontab 配置),只需在服务器 crontab 添加一行:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1 -
支持丰富的调度频率设置(如
->daily(),->everyMinute(),->cron('* * * * *'))。
-
-
Flysystem 集成
- 使用
league/flysystem提供强大的文件系统抽象。 - 支持本地磁盘、Amazon S3、Rackspace Cloud Storage 等多种存储方式。
- 通过
StorageFacade 统一操作。
- 使用
-
Contracts
- 框架核心组件(如缓存、队列、邮件)定义了接口(Contracts)。
- 提高了代码的灵活性和可测试性,便于替换实现。
-
方法注入
- 在控制器方法中可以直接通过类型提示注入依赖(如 Request 对象、Repository 等),无需手动解析。
-
密码重置
- 内置了更安全的密码重置功能(使用令牌、哈希、过期机制)。
-
环境变量管理
- 使用
php artisan key:generate生成APP_KEY。 - 改进
.env文件管理,方便不同环境配置。
- 使用
-
辅助函数变更
- 废弃了
array_*系列辅助函数(如array_fetch),推荐使用集合类 (Illuminate\Support\Collection) 的方法。
- 废弃了
-
Eloquent 改进
belongsToMany关系支持自定义中间表模型。- 新增
hasOneThrough和hasManyThrough关系类型。 - 查询作用域更灵活。
- 模型工厂 (Factories) 增强,便于测试数据生成。
-
其他
- 事件广播(需结合 WebSocket 服务如 Pusher、Redis)。
- 通知系统 (Notifications)。
- 任务调度 (Job Scheduling) 增强。
- 包自动发现 (
extra.laravelincomposer.json)。 - 前后端分离支持更好(API 资源、Passport)。
这些特性显著提升了 Laravel 的开发体验、性能、安全性和可维护性。