流明与 Laravel 之间的异同
Differences and Similarities Between Lumen and Laravel
我阅读了文档,似乎 Lumen Laravel 的功能较少。我肯定错过了什么。
我正在寻找 Laravel 和 Lumen 的组件和功能的比较 table。有人知道区别吗?
引自马特·斯托弗
Lumen has the same foundation as Laravel, and many of the same components. But Lumen is built for microservices, not so much for user-facing applications (although it can be used for anything.) As such, frontend niceties like Bootstrap and Elixir and the authentication bootstrap and sessions don't come enabled out of the box, and there's less flexibility for extending and changing the bootstrap files.
你可以阅读更多here
更新 (5.2)
在最新版本的 Lumen (5.2) 中,微框架专注于无状态 API。
documentation 状态:
Lumen 5.2 represents a shift on slimming Lumen to focus solely on serving stateless, JSON APIs. As such, sessions and views are no longer included with the framework. If you need access to these features, you should use the full Laravel framework.
原始答案 (<= 5.1)
流明就是速度。它比 Laravel.
更快,每秒可以处理更多的请求
Laravel 是一个将许多组件(第 3 方和 Laravel 自己的组件)粘合在一起的框架。现在 Lumen 使用了很多相同的组件,但将引导过程精简到了最低限度。你可以说它是一种“不同的胶水”,组件(因此很多功能)基本相同。
通过在配置方面取消框架的一些灵活性并更改默认启动过程来实现性能改进。
除此之外,更多功能默认禁用,必须激活才能使用。例如:Facades(如 DB::table()
)
您首先需要取消注释 bootstrap/app.php
中的这一行以启用它们:
// $app->withFacades();
Dotenv环境文件和Eloquent也是如此。
对于路由,Lumen 使用 nikic/FastRoute 而不是 symfonys 路由器,因为它的性能要好得多,并且给微框架带来了另一个巨大的提升。
除此之外,几乎所有内容都与 Laravel 中的相同。
关于 Lumen 的好文章
- Documentation (especially the introduction)
- Article from Matt Stauffer
- Interview with Taylor Otwell(尤其是最后一题)
- Reddit discussion
- Laracast: Introducing Lumen
Lumen 并非旨在取代 Laravel,相反,它是一个专为微服务和 API 设计的更专业(和精简)的框架。它删除了 API 不需要的功能,例如 HTTP 会话和 cookie,并且还限制了配置选项的数量。 开箱即用,Lumen 为了速度牺牲了 Laravel 的灵活性。
但是,您可以向 Lumen 添加 Laravel 组件来扩展它,因此它 可以 不仅仅用于微服务,而且 API .但是,如果您的目标是将 Lumen 扩展为一个网站,您不妨使用 Laravel。
它们也有不同的用例。 Lumen 和 Laravel 旨在协同工作。对于 APIs 和服务被频繁调用,请使用 Lumen。对于面向用户的应用程序,请使用 Laravel.
这个答案摘自我写的一篇 blog post,解释了 Lumen 和 Laravel 之间的区别。
Lumen 微框架是 Laravel 全栈框架的轻量级版本。 Lumen 使用 Laravel 语法和组件,并且可以 'upgrade' 轻松地 Laravel.
Lumen 是专为微服务开发和 API 开发而设计的更专业(和精简)的框架。因此,Laravel 中的某些功能(例如 HTTP 会话、cookie 和模板)是不需要的,Lumen 将它们拿走了,保留了必要的东西——路由、日志记录、缓存、队列、验证、错误处理和一些其他
为什么是流明?
Lumen is the perfect solution for building Laravel based micro-services and blazing fast APIs. In fact, it's one of the fastest micro-frameworks available. It has never been easier to write stunningly fast services to support your Laravel applications. Doc
Lumen 是一个构建 APIs 的框架,它实质上将为您的请求提供 JSON 响应。就是这样。
这些类型的应用程序通常被称为 Web 服务。
自 Lumen 5.2 更新起,它不支持 laravel 视图、会话等...为此您必须升级到完整的 laravel 框架。
Laravel 框架的一些组件与其他包交换以提高性能。 check them here
我们可以考虑 Lumen 的示例场景
- 您可能希望通过 API
向其他开发人员开放应用程序的某些功能
- 您的应用程序需要同时支持 Web 和移动应用程序,那么将数据存储在 Lumen 包装的数据库中将是完美的 API。
- 当您将可扩展性作为一个重点考虑时,您可能需要 lumen
laravel 和 lumen 的主要区别在于,Laravel 可以有 artisan 命令,而 lumen 没有。
Lumen 是一个微型框架,与 Laravel 具有相同的基础,并且有许多相同的组件。
- 但是 Lumen 是为微服务而构建的,而不是为面向用户的应用程序而构建的。
- 它是 Laravel 的大规模精简版,因此它删除了 API 不需要的功能,例如 HTTP 会话和 cookie,并且还限制了配置选项的数量。
- Lumen 使用了很多相同的组件,但将引导过程简化到最低限度。
- 它被设计成一个轻量级的 API 处理系统,因此您希望代码尽快启动并能够尽快 return 将数据返回给用户。
简而言之
- 你有相同的路由管理和相同的 MVC 功能,你有包括节流在内的中间件功能,但是 Eloquent 之类的东西在默认情况下是关闭的,尽管有一个设置可以打开它 - 它不像例如,它必须通过作曲家添加。
- 此外,您不会添加 tinker 和 artisan 命令等内容。
一些主要区别
- Laravel是一个全栈的web应用框架,封装或支持很多第三方工具和框架,而Lumen是一个微框架,用于开发微服务,API 旨在提供速度和高响应时间的开发。
- Laravel 需要不同类型的服务器配置,以及与应用程序一起使用的其他工具,而 Lumen 微框架是 Laravel 版本的轻型形式,提供专门的功能,例如API 开发、cookies、模板、缓存、日志记录、路由、HTTP 会话等
- Laravel 与 Lumen 相比,可以集成更多的工具,而 Lumen 与其他工具的集成设施较少。
- Laravel 性能会在 SQL 查询和从应用程序级别调优数据库的情况下表现良好,而 Lumen 的性能会在 SQL 查询和较少功能的情况下下降与 Laravel.
相比
- 在 Lumen 中,如果你需要 Eloquent,你必须启用它。
- 在 Lumen 中,您没有 Blade 模板引擎。
- Laravel 适合构建 RESTful APIs(应用程序编程接口),而 Lumen 是构建微服务时性能最高的微框架之一 API .
- Lumen 中的身份验证虽然使用与 Laravel 相同的底层库,但其配置与完整的 Laravel 框架截然不同。由于 Lumen 不支持会话状态,因此您希望验证的传入请求必须通过无状态机制(例如 API 令牌)进行验证。
- Lumen 没有 Laravel 具有的内置事件排队功能。
Laravel 9.x
and Lumen 9.x
路由选择
基本
Features
Laravel
Lumen
GET
Route::get($uri, $callback)
$router->get($uri, $callback)
POST
Route::post($uri, $callback)
$router->post($uri, $callback)
PUT
Route::put($uri, $callback)
$router->put($uri, $callback)
PATCH
Route::patch($uri, $callback)
$router->patch($uri, $callback)
DELETE
Route::delete($uri, $callback)
$router->delete($uri, $callback)
OPTION
Route::option($uri, $callback)
$router->option($uri, $callback)
Multiple HTTP verbs
Route::match($types, $uri, $callback)
All HTTP verbs
Route::any($uri, $callback)
重定向路由
Features
Laravel
Lumen
Basic
Route::redirect($from, $to, $status);
Premanent
Route::permanentRedirect($from, $to);
查看路线
Features
Laravel
Lumen
Basic
Route::view($from, $to);
路由参数
Features
Laravel
Lumen
Parameters
Parameters & Dependency Injection
Required Parameters
Required Parameters
Regular Expression Constraints
Global Constraints
命名路由
Features
Laravel
Lumen
Basic
Route::get($uri, $callback)->name('profile')
$router->get($uri, ['as' => 'profile', $callback])
Generating URLs To Named Routes
route('profile')
route('profile')
Inspecting The Current Route by Name
$request->route()->named('profile')
boolean
路由组
Features
Laravel
Lumen
Middleware
Route::middleware($middleware)
$router->group(['middleware' => $middleware], $callback)
Controllers
Route::controller(ProfileController::class)
Subdomain Routing
Route::domain('{account}.example.com')
Namespaces
Route::namespace($namespace)
$router->group(['namespace' => $namespace], $callback)
Route Prefixes
Route::prefix('admin')
$router->group(['prefix' => 'admin'], $callback)
Route Name Prefixes
Route::name('admin.')
路由模型绑定
Features
Laravel
Lumen
Implicit Binding
Implicit Enum Binding
Explicit Binding
后备路线
Features
Laravel
Lumen
Basic
Route::fallback()
路由缓存
Features
Laravel
Lumen
Basic
中间件
Features
Laravel
Lumen
Defining Middleware
artisan make:middleware
Manual
Global Middleware
Assigning Middleware To Routes
Middleware Groups
Middleware Parameters
Terminable Middleware
CSRF 保护
Features
Laravel
Lumen
Basic
自 Lumen 版本 5.2
后删除了 CSRF
控制器
Features
Laravel
Lumen
Defining Controller
artisan make:controller
Manual
Basic
Single Action Controllers
Controller Middleware
Resource Controllers
Dependency Injection & Controllers
请求
Features
Laravel
Lumen
Accessing The Request
Request Path & Method
Request Headers
Request IP Address
Content Negotiation
PSR-7 Requests
Retrieving Input
Determining If Input Is Present
Merging Additional Input
Old Input
Cookies
Input Trimming & Normalization
Retrieving Uploaded Files
Moving Uploaded Files
回应
Features
Laravel
Lumen
Attaching Headers To Responses
Attaching Cookies To Responses
Redirects
View Responses
JSON Responses
File Downloads
File Responses
观看次数和 Blade
Features
Laravel
Lumen
Basic
Blade
Session
Features
Laravel
Lumen
Basic
Session 自 Lumen 版本 5.2
后删除
验证
Features
Laravel
Lumen
Basic
Form Requests
The $this->validate
Method
The $this->validate
helper which is available in Lumen will always return a JSON response with the relevant error messages. This is in contrast to the Laravel version of the method which will return a redirect response if the request is not an AJAX request. Since Lumen is stateless and does not support sessions, flashing errors to the session is not a possibility. Unlike Laravel, Lumen provides access to the validate
method from within Route closures.
The exists
And unique
Rules
If you would like to use the exists
or unique
validation rules, you should uncomment the $app->withEloquent()
method call in your bootstrap/app.php
file.
The $errors
View Variable
Lumen does not support sessions out of the box, so the $errors
view variable that is available in every view in Laravel is not available in Lumen. Should validation fail, the $this->validate
helper will throw Illuminate\Validation\ValidationException
with embedded JSON response that includes all relevant error messages.
错误和日志记录
Features
Laravel
Lumen
Error
Logging
Artisan 控制台
Features
Laravel
Lumen
Running Commands
Writing Commands
缓存
Features
Laravel
Lumen
Basic
在使用 Cache
facade 之前,请确保您已取消注释 bootstrap/app.php
文件中的 $app->withFacades()
方法调用。
Redis支持
在 Lumen 使用 Redis 缓存之前,您需要通过 Composer 安装 illuminate/redis
包。然后,您应该在 bootstrap/app.php
文件中注册 Illuminate\Redis\RedisServiceProvider
:
$app->register(Illuminate\Redis\RedisServiceProvider::class);
如果你没有在你的bootstrap/app.php
文件中调用$app->withEloquent()
,那么你应该在bootstrap/app.php
文件中调用$app->configure('database');
以确保Redis数据库配置已正确加载。
编译资产
Features
Laravel
Lumen
Mix
事件
Features
Laravel
Lumen
Basic
发电机
在 Lumen 中,没有生成器命令来为你生成事件和监听器,所以你应该简单地复制 ExampleEvent
或 ExampleListener
classes 来定义你自己的事件和听众。这些示例 classes 提供了每个事件和侦听器的基本结构。
正在注册事件/监听器
与完整的 Laravel 框架一样,Lumen 应用程序中包含的 EventServiceProvider
提供了一个方便的地方来注册所有事件侦听器。 listen
属性 包含所有事件(键)及其侦听器(值)的数组。当然,您可以根据应用程序的需要向该数组添加任意数量的事件:
protected $listen = [
'App\Events\ExampleEvent' => [
'App\Listeners\ExampleListener',
],
];
触发事件
您可以使用 event
辅助函数或 Event
facade 在整个 Lumen 应用程序中触发事件。同样,这些函数的行为与它们的完整 Laravel 框架等效项完全相同:
event(new ExampleEvent);
Event::dispatch(new ExampleEvent);
身份验证与授权
Features
Laravel
Lumen
Authentication
Authorization
身份验证
Lumen 中的身份验证虽然使用与 Laravel 相同的底层库,但其配置与完整的 Laravel 框架完全不同。由于 Lumen 不支持 session 状态,您希望进行身份验证的传入请求必须通过无状态机制(例如 API 令牌进行身份验证。
授权
定义能力
与 Laravel 相比,在 Lumen 中使用授权的主要区别在于能力的定义方式。在 Lumen 中,您可以简单地使用 AuthServiceProvider
中的 Gate
门面来定义能力:
Gate::define('update-post', function ($user, $post) {
return $user->id === $post->user_id;
});
定义策略
与 Laravel 不同,Lumen 在其 AuthServiceProvider
上没有 $policies
数组。但是,您仍然可以从提供者的 boot
方法中调用 Gate
外观上的 policy
方法:
Gate::policy(Post::class, PostPolicy::class);
检查能力
您可以像在完整 Laravel 框架中一样“检查”能力。首先,您可以使用 Gate
门面。如果您选择使用外观,请确保在您的 bootstrap/app.php
文件中启用外观。请记住,我们不需要将 User
实例传递给 allows
方法,因为当前经过身份验证的用户将自动传递给您的授权回调:
if (Gate::allows('update-post', $post)) {
//
}
if (Gate::denies('update-post', $post)) {
abort(403);
}
当然,您也可以检查给定的User
实例是否具有给定的能力:
if ($request->user()->can('update-post', $post)) {
// The user is allowed to update the post...
}
if ($request->user()->cannot('update-post', $post)) {
abort(403);
}
数据库
Features
Laravel
Lumen
Basic Queries
Query Builder
Eloquent ORM
Migrations
Seeders
如果您想使用 DB
facade,您应该取消注释 bootstrap/app.php
文件中的 $app->withFacades()
调用。
电子邮件验证和重置密码
Features
Laravel
Lumen
Email Verification
Resetting Passwords
加密和散列
Features
Laravel
Lumen
Encryption
Hashing
您应该将 .env
文件的 APP_KEY
选项设置为 32 个字符的随机字符串。如果这个值设置不当,所有被Lumen加密的值都是不安全的。
邮件
Features
Laravel
Lumen
Basic
队列
Features
Laravel
Lumen
Basic
不支持关闭作业由 Lumen 提供。
发电机
Lumen 不包括用于自动创建新作业的生成器 classes。相反,您应该复制框架中包含的 ExampleJob
class。
调度作业
同样,您应该查阅完整的 Laravel 队列文档以获取有关调度排队作业的完整信息;然而,就像在 Laravel 框架中一样,您可以使用 dispatch
函数从您的 Lumen 应用程序中的任何地方调度作业:
dispatch(new ExampleJob);
当然,你也可以使用Queue
门面。如果您选择使用外观,请务必取消注释 bootstrap/app.php
文件中对 $app->withFacades()
的调用:
Queue::push(new ExampleJob);
服务容器
Features
Laravel
Lumen
Basic
访问容器
Laravel\Lumen\Application
实例是 Illuminate\Container\Container
的扩展,因此它可能被视为您的应用程序的服务容器。
解决实例
要解决容器外的问题,您可以 type-hint 您需要的依赖项 class 已经由容器自动解析,例如路由闭包、控制器构造函数、控制器方法、中间件、事件侦听器或排队作业。或者,您可以在应用程序的任何位置使用 app
函数:
$instance = app(Something::class);
测试
Features
Laravel
Lumen
Basic
我阅读了文档,似乎 Lumen Laravel 的功能较少。我肯定错过了什么。 我正在寻找 Laravel 和 Lumen 的组件和功能的比较 table。有人知道区别吗?
引自马特·斯托弗
Lumen has the same foundation as Laravel, and many of the same components. But Lumen is built for microservices, not so much for user-facing applications (although it can be used for anything.) As such, frontend niceties like Bootstrap and Elixir and the authentication bootstrap and sessions don't come enabled out of the box, and there's less flexibility for extending and changing the bootstrap files.
你可以阅读更多here
更新 (5.2)
在最新版本的 Lumen (5.2) 中,微框架专注于无状态 API。
documentation 状态:
Lumen 5.2 represents a shift on slimming Lumen to focus solely on serving stateless, JSON APIs. As such, sessions and views are no longer included with the framework. If you need access to these features, you should use the full Laravel framework.
原始答案 (<= 5.1)
流明就是速度。它比 Laravel.
更快,每秒可以处理更多的请求Laravel 是一个将许多组件(第 3 方和 Laravel 自己的组件)粘合在一起的框架。现在 Lumen 使用了很多相同的组件,但将引导过程精简到了最低限度。你可以说它是一种“不同的胶水”,组件(因此很多功能)基本相同。
通过在配置方面取消框架的一些灵活性并更改默认启动过程来实现性能改进。
除此之外,更多功能默认禁用,必须激活才能使用。例如:Facades(如 DB::table()
)
您首先需要取消注释 bootstrap/app.php
中的这一行以启用它们:
// $app->withFacades();
Dotenv环境文件和Eloquent也是如此。
对于路由,Lumen 使用 nikic/FastRoute 而不是 symfonys 路由器,因为它的性能要好得多,并且给微框架带来了另一个巨大的提升。
除此之外,几乎所有内容都与 Laravel 中的相同。
关于 Lumen 的好文章
- Documentation (especially the introduction)
- Article from Matt Stauffer
- Interview with Taylor Otwell(尤其是最后一题)
- Reddit discussion
- Laracast: Introducing Lumen
Lumen 并非旨在取代 Laravel,相反,它是一个专为微服务和 API 设计的更专业(和精简)的框架。它删除了 API 不需要的功能,例如 HTTP 会话和 cookie,并且还限制了配置选项的数量。 开箱即用,Lumen 为了速度牺牲了 Laravel 的灵活性。
但是,您可以向 Lumen 添加 Laravel 组件来扩展它,因此它 可以 不仅仅用于微服务,而且 API .但是,如果您的目标是将 Lumen 扩展为一个网站,您不妨使用 Laravel。
它们也有不同的用例。 Lumen 和 Laravel 旨在协同工作。对于 APIs 和服务被频繁调用,请使用 Lumen。对于面向用户的应用程序,请使用 Laravel.
这个答案摘自我写的一篇 blog post,解释了 Lumen 和 Laravel 之间的区别。
Lumen 微框架是 Laravel 全栈框架的轻量级版本。 Lumen 使用 Laravel 语法和组件,并且可以 'upgrade' 轻松地 Laravel.
Lumen 是专为微服务开发和 API 开发而设计的更专业(和精简)的框架。因此,Laravel 中的某些功能(例如 HTTP 会话、cookie 和模板)是不需要的,Lumen 将它们拿走了,保留了必要的东西——路由、日志记录、缓存、队列、验证、错误处理和一些其他
为什么是流明?
Lumen is the perfect solution for building Laravel based micro-services and blazing fast APIs. In fact, it's one of the fastest micro-frameworks available. It has never been easier to write stunningly fast services to support your Laravel applications. Doc
Lumen 是一个构建 APIs 的框架,它实质上将为您的请求提供 JSON 响应。就是这样。
这些类型的应用程序通常被称为 Web 服务。
自 Lumen 5.2 更新起,它不支持 laravel 视图、会话等...为此您必须升级到完整的 laravel 框架。
Laravel 框架的一些组件与其他包交换以提高性能。 check them here
我们可以考虑 Lumen 的示例场景
- 您可能希望通过 API 向其他开发人员开放应用程序的某些功能
- 您的应用程序需要同时支持 Web 和移动应用程序,那么将数据存储在 Lumen 包装的数据库中将是完美的 API。
- 当您将可扩展性作为一个重点考虑时,您可能需要 lumen
laravel 和 lumen 的主要区别在于,Laravel 可以有 artisan 命令,而 lumen 没有。
Lumen 是一个微型框架,与 Laravel 具有相同的基础,并且有许多相同的组件。
- 但是 Lumen 是为微服务而构建的,而不是为面向用户的应用程序而构建的。
- 它是 Laravel 的大规模精简版,因此它删除了 API 不需要的功能,例如 HTTP 会话和 cookie,并且还限制了配置选项的数量。
- Lumen 使用了很多相同的组件,但将引导过程简化到最低限度。
- 它被设计成一个轻量级的 API 处理系统,因此您希望代码尽快启动并能够尽快 return 将数据返回给用户。
简而言之
- 你有相同的路由管理和相同的 MVC 功能,你有包括节流在内的中间件功能,但是 Eloquent 之类的东西在默认情况下是关闭的,尽管有一个设置可以打开它 - 它不像例如,它必须通过作曲家添加。
- 此外,您不会添加 tinker 和 artisan 命令等内容。
一些主要区别
- Laravel是一个全栈的web应用框架,封装或支持很多第三方工具和框架,而Lumen是一个微框架,用于开发微服务,API 旨在提供速度和高响应时间的开发。
- Laravel 需要不同类型的服务器配置,以及与应用程序一起使用的其他工具,而 Lumen 微框架是 Laravel 版本的轻型形式,提供专门的功能,例如API 开发、cookies、模板、缓存、日志记录、路由、HTTP 会话等
- Laravel 与 Lumen 相比,可以集成更多的工具,而 Lumen 与其他工具的集成设施较少。
- Laravel 性能会在 SQL 查询和从应用程序级别调优数据库的情况下表现良好,而 Lumen 的性能会在 SQL 查询和较少功能的情况下下降与 Laravel. 相比
- 在 Lumen 中,如果你需要 Eloquent,你必须启用它。
- 在 Lumen 中,您没有 Blade 模板引擎。
- Laravel 适合构建 RESTful APIs(应用程序编程接口),而 Lumen 是构建微服务时性能最高的微框架之一 API .
- Lumen 中的身份验证虽然使用与 Laravel 相同的底层库,但其配置与完整的 Laravel 框架截然不同。由于 Lumen 不支持会话状态,因此您希望验证的传入请求必须通过无状态机制(例如 API 令牌)进行验证。
- Lumen 没有 Laravel 具有的内置事件排队功能。
Laravel 9.x
and Lumen 9.x
路由选择
基本
Features | Laravel | Lumen |
---|---|---|
GET |
Route::get($uri, $callback) |
$router->get($uri, $callback) |
POST |
Route::post($uri, $callback) |
$router->post($uri, $callback) |
PUT |
Route::put($uri, $callback) |
$router->put($uri, $callback) |
PATCH |
Route::patch($uri, $callback) |
$router->patch($uri, $callback) |
DELETE |
Route::delete($uri, $callback) |
$router->delete($uri, $callback) |
OPTION |
Route::option($uri, $callback) |
$router->option($uri, $callback) |
Multiple HTTP verbs | Route::match($types, $uri, $callback) |
|
All HTTP verbs | Route::any($uri, $callback) |
重定向路由
Features | Laravel | Lumen |
---|---|---|
Basic | Route::redirect($from, $to, $status); |
|
Premanent | Route::permanentRedirect($from, $to); |
查看路线
Features | Laravel | Lumen |
---|---|---|
Basic | Route::view($from, $to); |
路由参数
Features | Laravel | Lumen |
---|---|---|
Parameters | ||
Parameters & Dependency Injection | ||
Required Parameters | ||
Required Parameters | ||
Regular Expression Constraints | ||
Global Constraints |
命名路由
Features | Laravel | Lumen |
---|---|---|
Basic | Route::get($uri, $callback)->name('profile') |
$router->get($uri, ['as' => 'profile', $callback]) |
Generating URLs To Named Routes | route('profile') |
route('profile') |
Inspecting The Current Route by Name | $request->route()->named('profile') boolean |
路由组
Features | Laravel | Lumen |
---|---|---|
Middleware | Route::middleware($middleware) |
$router->group(['middleware' => $middleware], $callback) |
Controllers | Route::controller(ProfileController::class) |
|
Subdomain Routing | Route::domain('{account}.example.com') |
|
Namespaces | Route::namespace($namespace) |
$router->group(['namespace' => $namespace], $callback) |
Route Prefixes | Route::prefix('admin') |
$router->group(['prefix' => 'admin'], $callback) |
Route Name Prefixes | Route::name('admin.') |
路由模型绑定
Features | Laravel | Lumen |
---|---|---|
Implicit Binding | ||
Implicit Enum Binding | ||
Explicit Binding |
后备路线
Features | Laravel | Lumen |
---|---|---|
Basic | Route::fallback() |
路由缓存
Features | Laravel | Lumen |
---|---|---|
Basic |
中间件
Features | Laravel | Lumen |
---|---|---|
Defining Middleware | artisan make:middleware |
Manual |
Global Middleware | ||
Assigning Middleware To Routes | ||
Middleware Groups | ||
Middleware Parameters | ||
Terminable Middleware |
CSRF 保护
Features | Laravel | Lumen |
---|---|---|
Basic |
自 Lumen 版本 5.2
控制器
Features | Laravel | Lumen |
---|---|---|
Defining Controller | artisan make:controller |
Manual |
Basic | ||
Single Action Controllers | ||
Controller Middleware | ||
Resource Controllers | ||
Dependency Injection & Controllers |
请求
Features | Laravel | Lumen |
---|---|---|
Accessing The Request | ||
Request Path & Method | ||
Request Headers | ||
Request IP Address | ||
Content Negotiation | ||
PSR-7 Requests | ||
Retrieving Input | ||
Determining If Input Is Present | ||
Merging Additional Input | ||
Old Input | ||
Cookies | ||
Input Trimming & Normalization | ||
Retrieving Uploaded Files | ||
Moving Uploaded Files |
回应
Features | Laravel | Lumen |
---|---|---|
Attaching Headers To Responses | ||
Attaching Cookies To Responses | ||
Redirects | ||
View Responses | ||
JSON Responses | ||
File Downloads | ||
File Responses |
观看次数和 Blade
Features | Laravel | Lumen |
---|---|---|
Basic | ||
Blade |
Session
Features | Laravel | Lumen |
---|---|---|
Basic |
Session 自 Lumen 版本 5.2
验证
Features | Laravel | Lumen |
---|---|---|
Basic | ||
Form Requests | ||
The $this->validate Method |
The $this->validate helper which is available in Lumen will always return a JSON response with the relevant error messages. This is in contrast to the Laravel version of the method which will return a redirect response if the request is not an AJAX request. Since Lumen is stateless and does not support sessions, flashing errors to the session is not a possibility. Unlike Laravel, Lumen provides access to the validate method from within Route closures. |
|
The exists And unique Rules |
If you would like to use the exists or unique validation rules, you should uncomment the $app->withEloquent() method call in your bootstrap/app.php file. |
|
The $errors View Variable |
Lumen does not support sessions out of the box, so the $errors view variable that is available in every view in Laravel is not available in Lumen. Should validation fail, the $this->validate helper will throw Illuminate\Validation\ValidationException with embedded JSON response that includes all relevant error messages. |
错误和日志记录
Features | Laravel | Lumen |
---|---|---|
Error | ||
Logging |
Artisan 控制台
Features | Laravel | Lumen |
---|---|---|
Running Commands | ||
Writing Commands |
缓存
Features | Laravel | Lumen |
---|---|---|
Basic |
在使用 Cache
facade 之前,请确保您已取消注释 bootstrap/app.php
文件中的 $app->withFacades()
方法调用。
Redis支持
在 Lumen 使用 Redis 缓存之前,您需要通过 Composer 安装 illuminate/redis
包。然后,您应该在 bootstrap/app.php
文件中注册 Illuminate\Redis\RedisServiceProvider
:
$app->register(Illuminate\Redis\RedisServiceProvider::class);
如果你没有在你的bootstrap/app.php
文件中调用$app->withEloquent()
,那么你应该在bootstrap/app.php
文件中调用$app->configure('database');
以确保Redis数据库配置已正确加载。
编译资产
Features | Laravel | Lumen |
---|---|---|
Mix |
事件
Features | Laravel | Lumen |
---|---|---|
Basic |
发电机
在 Lumen 中,没有生成器命令来为你生成事件和监听器,所以你应该简单地复制 ExampleEvent
或 ExampleListener
classes 来定义你自己的事件和听众。这些示例 classes 提供了每个事件和侦听器的基本结构。
正在注册事件/监听器
与完整的 Laravel 框架一样,Lumen 应用程序中包含的 EventServiceProvider
提供了一个方便的地方来注册所有事件侦听器。 listen
属性 包含所有事件(键)及其侦听器(值)的数组。当然,您可以根据应用程序的需要向该数组添加任意数量的事件:
protected $listen = [
'App\Events\ExampleEvent' => [
'App\Listeners\ExampleListener',
],
];
触发事件
您可以使用 event
辅助函数或 Event
facade 在整个 Lumen 应用程序中触发事件。同样,这些函数的行为与它们的完整 Laravel 框架等效项完全相同:
event(new ExampleEvent);
Event::dispatch(new ExampleEvent);
身份验证与授权
Features | Laravel | Lumen |
---|---|---|
Authentication | ||
Authorization |
身份验证
Lumen 中的身份验证虽然使用与 Laravel 相同的底层库,但其配置与完整的 Laravel 框架完全不同。由于 Lumen 不支持 session 状态,您希望进行身份验证的传入请求必须通过无状态机制(例如 API 令牌进行身份验证。
授权
定义能力
与 Laravel 相比,在 Lumen 中使用授权的主要区别在于能力的定义方式。在 Lumen 中,您可以简单地使用 AuthServiceProvider
中的 Gate
门面来定义能力:
Gate::define('update-post', function ($user, $post) {
return $user->id === $post->user_id;
});
定义策略
与 Laravel 不同,Lumen 在其 AuthServiceProvider
上没有 $policies
数组。但是,您仍然可以从提供者的 boot
方法中调用 Gate
外观上的 policy
方法:
Gate::policy(Post::class, PostPolicy::class);
检查能力
您可以像在完整 Laravel 框架中一样“检查”能力。首先,您可以使用 Gate
门面。如果您选择使用外观,请确保在您的 bootstrap/app.php
文件中启用外观。请记住,我们不需要将 User
实例传递给 allows
方法,因为当前经过身份验证的用户将自动传递给您的授权回调:
if (Gate::allows('update-post', $post)) {
//
}
if (Gate::denies('update-post', $post)) {
abort(403);
}
当然,您也可以检查给定的User
实例是否具有给定的能力:
if ($request->user()->can('update-post', $post)) {
// The user is allowed to update the post...
}
if ($request->user()->cannot('update-post', $post)) {
abort(403);
}
数据库
Features | Laravel | Lumen |
---|---|---|
Basic Queries | ||
Query Builder | ||
Eloquent ORM | ||
Migrations | ||
Seeders |
如果您想使用 DB
facade,您应该取消注释 bootstrap/app.php
文件中的 $app->withFacades()
调用。
电子邮件验证和重置密码
Features | Laravel | Lumen |
---|---|---|
Email Verification | ||
Resetting Passwords |
加密和散列
Features | Laravel | Lumen |
---|---|---|
Encryption | ||
Hashing |
您应该将 .env
文件的 APP_KEY
选项设置为 32 个字符的随机字符串。如果这个值设置不当,所有被Lumen加密的值都是不安全的。
邮件
Features | Laravel | Lumen |
---|---|---|
Basic |
队列
Features | Laravel | Lumen |
---|---|---|
Basic |
不支持关闭作业由 Lumen 提供。
发电机
Lumen 不包括用于自动创建新作业的生成器 classes。相反,您应该复制框架中包含的 ExampleJob
class。
调度作业
同样,您应该查阅完整的 Laravel 队列文档以获取有关调度排队作业的完整信息;然而,就像在 Laravel 框架中一样,您可以使用 dispatch
函数从您的 Lumen 应用程序中的任何地方调度作业:
dispatch(new ExampleJob);
当然,你也可以使用Queue
门面。如果您选择使用外观,请务必取消注释 bootstrap/app.php
文件中对 $app->withFacades()
的调用:
Queue::push(new ExampleJob);
服务容器
Features | Laravel | Lumen |
---|---|---|
Basic |
访问容器
Laravel\Lumen\Application
实例是 Illuminate\Container\Container
的扩展,因此它可能被视为您的应用程序的服务容器。
解决实例
要解决容器外的问题,您可以 type-hint 您需要的依赖项 class 已经由容器自动解析,例如路由闭包、控制器构造函数、控制器方法、中间件、事件侦听器或排队作业。或者,您可以在应用程序的任何位置使用 app
函数:
$instance = app(Something::class);
测试
Features | Laravel | Lumen |
---|---|---|
Basic |