好的,我们来梳理一下 Laravel 3.x 版本(大约发布于 2012 年)的主要特性。需要注意的是,这是一个相对早期的版本,许多特性在后续版本中经历了重大改进或重构。
核心特性与设计:
-
基于 Bundle 的模块化架构:
- Laravel 3 的核心思想是高度模块化。应用程序的功能被组织成一个个独立的 Bundle。
- 每个 Bundle 可以包含自己的路由、控制器、模型、视图、配置文件、迁移文件、甚至公开的 assets (CSS, JS)。
- 这种设计旨在促进代码重用和应用程序组件的解耦。开发者可以创建自己的 Bundle 或使用社区提供的 Bundle。
- 对比现代: 这个概念后来演变为更符合 Composer 标准的 Packages。
-
路由系统:
-
支持定义基于闭包的路由和控制器路由。
-
提供了常见的路由方法:
Route::get(),Route::post(),Route::any(),Route::controller()等。 -
支持路由参数、过滤器(类似于现代的中间件,但更简单)、命名路由。
-
示例:
phpRoute::get('user/(:any)', function($name) { return 'Hello '.$name; });
-
-
Eloquent ORM (早期版本):
- 提供了对象关系映射功能,但功能集比现代 Eloquent 要精简很多。
- 支持定义模型、进行基本的 CRUD 操作、定义关系(如
has_many,belongs_to),但关系处理相对简单。 - 查询构建器功能也较基础。
-
查询构建器 (Fluent):
-
提供了一套流畅的接口(Fluent Query Builder)来构建数据库查询,支持多种数据库(MySQL, PostgreSQL, SQLite, SQL Server)。
-
示例:
phpDB::table('users')->where('votes', '>', 100)->get();
-
-
视图与 Blade 模板引擎:
- 支持将数据传递给视图。
- 引入了 Blade 模板引擎,这是 Laravel 的标志性特性之一。它提供了简洁的语法(如
@if,@foreach,@include)和模板继承 (@extends,@section,@yield)。 - 视图文件通常放在
application/views目录下。
-
控制器:
- 支持基于类的控制器,用于组织路由处理逻辑。
- 可以使用
Route::controller()自动映射控制器方法到路由。
-
迁移:
- 提供了数据库迁移系统,允许通过 PHP 代码定义数据库结构变更(创建、修改表),并支持版本控制(回滚/重做迁移)。
- 迁移文件存放在
application/migrations。
-
Artisan 命令行工具:
- 提供了命令行接口 Artisan,用于执行各种开发任务,如生成代码骨架(控制器、模型、迁移)、运行迁移、启动内置开发服务器等。
- 功能比现代 Artisan 少很多。
-
配置:
- 配置文件位于
application/config目录下,按功能分文件(如database.php,application.php,session.php)。 - 使用
ConfigFacade 访问配置值。
- 配置文件位于
-
自动加载器:
- 使用了基于
spl_autoload_register的自定义类加载器(通常通过bundle.php文件注册),这与现代 Composer 的自动加载不同。
- 使用了基于
-
错误与日志:
- 提供错误处理机制和日志记录功能(可配置日志存储位置和级别)。
-
安全特性:
- 提供 CSRF 保护(通过
Form::token()和Input::has_token())。 - 提供基本的输入数据过滤和 XSS 防护(虽然不如现代的中间件强大)。
- 提供 CSRF 保护(通过
-
缓存与 Session:
- 支持多种缓存驱动(文件、数据库、Memcached、Redis 等)。
- 支持多种 Session 驱动(同上)。
-
邮件:
- 提供基本的邮件发送功能(通常通过
Mail类),支持 SMTP、PHPmail()函数、Sendmail。
- 提供基本的邮件发送功能(通常通过
-
验证:
- 提供验证器类 (
Validator),用于验证用户输入数据。
- 提供验证器类 (
总结: Laravel 3.x 奠定了框架的核心基础(路由、ORM、模板、迁移、CLI),其最大的特点是基于 Bundle 的模块化架构和相对简洁的设计。它为后续版本(尤其是 Laravel 4 及以后)的爆发式发展提供了雏形。不过,与现代 Laravel 相比,它在依赖管理(Composer)、包生态、ORM 功能、中间件、测试支持等方面要原始和薄弱得多。官方文档最后更新的版本是 3.2.14 (可在 archive.org 找到快照)。