ChatGPT解决这个技术问题 Extra ChatGPT

Lumen 和 Laravel 的异同

我阅读了文档,似乎 Lumen 是 Laravel 的功能较少。我肯定错过了什么。我正在寻找 Laravel 和 Lumen 的组件和功能的比较表。有谁知道区别?

这似乎不对。 Laravel 是一个功能齐全的框架,其中 Lumen 被吹捧为从 Laravel 派生的微框架,牺牲了它的一些可配置性和可扩展性。
Lumen 几乎是 Laravel,但功能较少。这才是重点。

C
Community

更新 (5.2)

在最新版本的 Lumen (5.2) 中,微框架专注于无状态 API。
documentation 指出:

Lumen 5.2 代表了精简 Lumen 到只专注于服务无状态的 JSON API 的转变。因此,会话和视图不再包含在框架中。如果你需要访问这些功能,你应该使用完整的 Laravel 框架。

原始答案(<= 5.1)

流明就是速度。它比 Laravel 更快,每秒可以处理更多的请求。

Laravel 是一个将许多组件(第三方和 Laravel 自己的组件)粘合在一起的框架。现在 Lumen 使用了许多相同的组件,但将引导过程减少到最低限度。您可以说它是一种“不同的胶水”,组件(以及许多功能)大多相同。

通过在配置和更改默认启动过程方面消除框架的一些灵活性来实现性能改进。

除此之外,默认情况下会禁用更多功能,并且必须先激活它们才能使用。例如:Facades(如 DB::table()
您首先需要在 bootstrap/app.php 中取消注释此行以启用它们:

// $app->withFacades();

Dotenv 环境文件和 Eloquent 也是如此。

对于路由,Lumen 使用 nikic/FastRoute 而不是 symfonys 路由器,因为它的性能要好得多,并且给微框架另一个很大的提升。

除此之外,几乎所有内容都与 Laravel 中的相同。

关于流明的好读物

文档(尤其是介绍)

Matt Stauffer 的文章

采访 Taylor Otwell(尤其是最后一个问题)

Reddit 讨论

Laracast:引入流明


如果我们开始取消注释以恢复功能,会那么快吗?
@SamDark 显然,您启用的每个功能都会变慢一些。但它仍然会很快,因为禁用的功能只是性能优化的一部分
因此,基准测试并不能反映实际应用程序的开销,而在实际应用程序中它会更高。好的。
@SamDark This blog post 解释了它是如何进行基准测试的。正如您所看到的,测试应用程序只返回“Hello World”而不使用模型或其他框架功能,因此实际应用程序中的性能会变慢(尽管在大多数情况下并不明显。您的应用程序仍然会快得离谱)
@lukasgeiter,据我所知,如果我正在使用 RESTful Laravel API 构建 Ionic 应用程序,那么使用 Lumen 会更有意义吗?
d
d4nyll

Lumen 并非旨在取代 Laravel,而是为微服务和 API 设计的更专业(和精简)的框架。它消除了 API 不需要的功能,例如 HTTP 会话和 cookie,并且还限制了配置选项的数量。开箱即用的 Lumen 牺牲了 Laravel 的灵活性来换取速度。

但是,您可以将 Laravel 组件添加到 Lumen 以对其进行扩展,因此它不仅可以用于微服务和 API。但是,如果您的目标是将 Lumen 扩展为一个网站,那么您不妨改用 Laravel。

它们也有不同的用例。 Lumen 和 Laravel 旨在协同工作。对于频繁调用的 API 和服务,请使用 Lumen。对于面向用户的应用程序,请使用 Laravel。

这个答案取自我写的 blog post,它解释了 Lumen 和 Laravel 之间的区别。


据我所知,cookie、会话等仍然存在。但是,它们将被延迟加载,并且仅在使用时才真正影响性能。
Lumen 现在是我首选的框架。我不使用 Eloquent(或任何 ORM),所以 Lumen 非常适合我。
假设我正在构建一个 Web 应用程序并决定编写一个 API 来进一步分离逻辑(并轻松允许第三方应用程序)。用 Lumen 编写 API 并用 Laravel 编写网站是一种好习惯吗?
这是一个替代品。这是带有不同路由器的 Laravel。几乎没有任何东西被剥离 - 只是成为可选的。当据称更快的 Laravel (Lumen) 可用时,没有正当理由使用 Laravel。
I
Ivan Dokov

引用 Matt Stauffer 的话

Lumen 与 Laravel 具有相同的基础,以及许多相同的组件。但是 Lumen 是为微服务而构建的,而不是面向用户的应用程序(尽管它可以用于任何事情。)因此,像 Bootstrap 和 Elixir 这样的前端细节以及身份验证引导程序和会话并不是开箱即用的,并且扩展和更改引导文件的灵活性较小。

您可以阅读更多here


此外,Lumen 不使用 Symfony 的路由组件。相反,nikic/fast-route 用于提高性能。
无论如何,Laravel 的 Matt Stauffer 的 bower setup 违背了 Laravel 中默认 Bootstrap UI 内容的目的,而对于 Elixir,那是一个 npm install,所以我会说它还没有完全准备好“开箱即用”。因此,通过切换到 Lumen,我们在这些方面并没有损失太多。在 Lumen 中,我只需创建一个 package.json 和 npm install Elixer,然后设置 bower 并完成...
但是,在使用 Lumen 之后,我可以告诉你有一些挫折。到目前为止,我发现与 Laravel 提供的相比,许多请求/路由/帮助程序是不完整的。例如,您不能执行 redirect()->intended。我希望 Lumen 能够在这些领域赶上。我真的很喜欢没有 ORM(Eloquent)的 Laravel,所以 Lumen 对我很有吸引力。
@prograhammer,我认为 Lumen 中永远不会包含该特定功能。我认为这需要 Lumen 有意取消的会话。此外,我认为 redirect()->intended() 与 API 并没有多大用处,而这正是 Lumen 所关注的。
Lumen 用于 APIS 而不是前端
p
pardeep

Lumen 微框架是 Laravel 全栈框架的轻量级版本。 Lumen 使用 Laravel 语法和组件,可以轻松“升级”到 Laravel。

Lumen 是专为微服务开发和 API 开发而设计的更专业(和精简)的框架。因此,Laravel 中的一些特性,如 HTTP 会话、cookie 和模板是不需要的,Lumen 将它们去掉,保留了必要的东西——路由、日志记录、缓存、队列、验证、错误处理和其他一些。


W
Wahyu Kristianto

Laravel 9.x 和 Lumen 9.x

路由

基本的

特性 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) 多个 HTTP 动词Route::match($types, $uri, $callback) 所有 HTTP 动词 Route::any($uri, $callback)

重定向路线

特点 Laravel Lumen 基本路由::redirect($from, $to, $status); Premanent Route::permanentRedirect($from, $to);

查看路线

特点 Laravel Lumen Basic Route::view($from, $to);

路由参数

特性 Laravel Lumen 参数 参数和依赖注入 必需参数 必需参数 正则表达式约束 全局约束

命名路线

特性 Laravel Lumen 基本路由::get($uri, $callback)->name('profile') $router->get($uri, ['as' => 'profile', $callback]) 生成要命名的 URL Routes route('profile') route('profile') 按名称检查当前路由 $request->route()->named('profile') boolean

路由组

特性 Laravel Lumen 中间件 Route::middleware($middleware) $router->group(['middleware' => $middleware], $callback) 控制器 Route::controller(ProfileController::class) 子域路由 Route::domain(' {account}.example.com') 命名空间 Route::namespace($namespace) $router->group(['namespace' => $namespace], $callback) 路由前缀 Route::prefix('admin') $router ->group(['prefix' => 'admin'], $callback) 路由名称前缀 Route::name('admin.')

路由模型绑定

特性 Laravel Lumen 隐式绑定 隐式枚举绑定 显式绑定

后备路线

特点 Laravel Lumen Basic Route::fallback()

路由缓存

特点 Laravel Lumen Basic

中间件

特性 Laravel Lumen 定义中间件 artisan make:middleware Manual Global Middleware Assigning Middleware To Routes Middleware Groups Middleware Parameters Terminable Middleware

CSRF 保护

特点 Laravel Lumen Basic

自 Lumen 版本 5.2 起删除了 CSRF

控制器

特性 Laravel Lumen 定义控制器 artisan make:controller Manual Basic Single Action Controllers Controller Middleware Resource Controllers Dependency Injection & Controllers

要求

特性 Laravel Lumen 访问请求 请求路径和方法 请求标头 请求 IP 地址 内容协商 PSR-7 请求 检索输入 确定输入是否存在 合并附加输入 旧输入 Cookie 输入修剪和标准化 检索上传的文件 移动上传的文件

回复

特性 Laravel Lumen 将标头附加到响应 将 Cookie 附加到响应 重定向 查看响应 JSON 响应 文件下载 文件响应

视图和刀片

特点 Laravel Lumen Basic Blade

会议

特点 Laravel Lumen Basic

自 Lumen 版本 5.2 以来已删除会话

验证

特性 Laravel Lumen 基本表单请求 $this->validate 方法 Lumen 中可用的 $this->validate 助手将始终返回带有相关错误消息的 JSON 响应。这与 Laravel 版本的方法相反,如果请求不是 AJAX 请求,它将返回重定向响应。由于 Lumen 是无状态的并且不支持会话,因此不可能向会话闪烁错误。与 Laravel 不同,Lumen 提供了从 Route 闭包中访问 validate 方法。 exists 和 unique 规则 如果您想使用 exists 或 unique 验证规则,您应该在 bootstrap/app.php 文件中取消注释 $app->withEloquent() 方法调用。 $errors 视图变量 Lumen 不支持开箱即用的会话,因此 Laravel 中每个视图中可用的 $errors 视图变量在 Lumen 中不可用。如果验证失败,$this->validate 助手将抛出 Illuminate\Validation\ValidationException 并嵌入包含所有相关错误消息的 JSON 响应。

错误和日志

功能 Laravel Lumen 错误记录

工匠控制台

特点 Laravel Lumen 运行命令 编写命令

缓存

特点 Laravel Lumen Basic

在使用 Cache 外观之前,请确保您已取消注释 bootstrap/app.php 文件中的 $app->withFacades() 方法调用。

Redis 支持

在将 Redis 缓存与 Lumen 一起使用之前,您需要通过 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 数据库配置。

编译资产

特点 Laravel Lumen Mix

活动

特点 Laravel Lumen Basic

发电机

在 Lumen 中,没有生成器命令可以为您生成事件和侦听器,因此您只需复制 ExampleEventExampleListener 类即可定义您自己的事件和侦听器。这些示例类提供了每个事件和侦听器的基本结构。

注册事件/监听器

与完整的 Laravel 框架一样,您的 Lumen 应用程序中包含的 EventServiceProvider 提供了一个方便的位置来注册所有事件侦听器。 listen 属性包含所有事件(键)及其侦听器(值)的数组。当然,您可以根据应用程序的需要向该数组添加任意数量的事件:

protected $listen = [
    'App\Events\ExampleEvent' => [
        'App\Listeners\ExampleListener',
    ],
];

射击事件

您可以使用 event 辅助函数或 Event 外观在整个 Lumen 应用程序中触发事件。同样,这些函数的行为与完整的 Laravel 框架等效:

event(new ExampleEvent);
Event::dispatch(new ExampleEvent);

认证与授权

特点 Laravel Lumen 认证授权

验证

Lumen 中的身份验证虽然使用与 Laravel 相同的底层库,但配置与完整的 Laravel 框架完全不同。由于 Lumen 不支持会话状态,因此您希望验证的传入请求必须通过 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);
}

数据库

特性 Laravel Lumen 基本查询 查询生成器 Eloquent ORM 迁移 Seeders

如果您想使用 DB 外观,您应该在 bootstrap/app.php 文件中取消注释 $app->withFacades() 调用。

电子邮件验证和重置密码

功能 Laravel Lumen 电子邮件验证 重置密码

加密和散列

特点 Laravel Lumen 加密散列

您应该将 .env 文件的 APP_KEY 选项设置为 32 个字符的随机字符串。如果这个值没有正确设置,所有被 Lumen 加密的值都是不安全的。

邮件

特点 Laravel Lumen Basic

队列

特点 Laravel Lumen Basic

Lumen 不支持关闭作业。

发电机

Lumen 不包括用于自动创建新作业类的生成器。相反,您应该复制框架中包含的 ExampleJob 类。

派遣工作

同样,您应该查阅完整的 Laravel 队列文档以获取有关调度队列作业的完整信息;但是,就像在 Laravel 框架中一样,您可以使用 dispatch 函数从 Lumen 应用程序中的任何位置分派作业:

dispatch(new ExampleJob);

当然,您也可以使用 Queue 外观。如果您选择使用外观,请务必在您的 bootstrap/app.php 文件中取消注释对 $app->withFacades() 的调用:

Queue::push(new ExampleJob);

服务容器

特点 Laravel Lumen Basic

访问容器

Laravel\Lumen\Application 实例是 Illuminate\Container\Container 的扩展,因此它可以被视为您的应用程序的服务容器。

解析实例

要解决容器外的问题,您可以在已由容器自动解析的类上键入所需的依赖项,例如路由闭包、控制器构造函数、控制器方法、中间件、事件侦听器或排队作业.或者,您可以在应用程序的任何位置使用 app 函数:

$instance = app(Something::class);

测试

特点 Laravel Lumen Basic


D
Davide Casiraghi

Lumen 是一个微框架,与 Laravel 具有相同的基础,并且有许多相同的组件。

但是 Lumen 是为微服务而构建的,而不是面向用户的应用程序。

它是 Laravel 的大规模精简版本,因此它去掉了 API 不需要的功能,例如 HTTP 会话和 cookie,并且还限制了配置选项的数量。

Lumen 使用了许多相同的组件,但将引导过程减少到最低限度。

它被设计成一个轻量级的 API 处理系统,因此您希望代码尽快启动并能够尽快将数据返回给用户。

为了缩短

您拥有相同的路由管理和相同的 MVC 功能,您拥有包括节流在内的中间件功能,但是像 Eloquent 这样的东西默认情况下是关闭的,尽管有一个设置可以打开它——它不像它必须通过作曲家添加例如.

此外,您不会得到诸如添加修补程序和工匠命令之类的东西。

一些主要区别

Laravel 是一个全栈 Web 应用程序框架,它封装或支持许多第三方工具和框架,而 Lumen 是一个微框架,用于开发微服务和 API 开发,旨在提供速度和高响应时间。

Laravel 需要不同类型的服务器配置,以及与应用程序一起使用的其他工具,而 Lumen 微框架是 Laravel 版本的轻量级形式,提供 API 开发、cookie、模板、缓存、日志记录、路由等特殊功能, HTTP 会话等。

与 Lumen 相比,Laravel 可以与更多数量的工具集成,而 Lumen 与其他工具的集成设施更少。

Laravel 在 SQL 查询和从应用程序级别调优数据库的情况下性能会很好,而 Lumen 在 SQL 查询和功能较少的情况下性能下降。与 Laravel 相比。

在 Lumen 中,如果你需要 Eloquent,你必须启用它。

在 Lumen 中,您没有 Blade 模板引擎。

Laravel 非常适合构建 RESTful API(应用程序编程接口),而 Lumen 是用于构建微服务的性能最高的微框架 API 之一。

Lumen 中的身份验证虽然使用与 Laravel 相同的底层库,但配置与完整的 Laravel 框架完全不同。由于 Lumen 不支持会话状态,因此您希望验证的传入请求必须通过 API 令牌等无状态机制进行验证。

Lumen 没有 Laravel 的内置事件队列功能。


S
Shobi

为什么是流明?

Lumen 是构建基于 Laravel 的微服务和极速 API 的完美解决方案。事实上,它是可用的最快的微框架之一。编写速度惊人的服务来支持您的 Laravel 应用程序从未如此简单。文档

Lumen 是一个构建 API 的框架,它本质上将为您的请求提供 JSON 响应。而已。

这些类型的应用程序通常称为 Web 服务。

从 Lumen 5.2 更新开始,它不支持 laravel 视图、会话等……因为你必须升级到完整的 laravel 框架。

Laravel 框架的某些组件与其他包交换以提高性能。 check them here

我们可以考虑流明的示例场景

您可能希望通过 API 向其他开发人员开放应用程序的某些功能

您的应用程序需要同时支持 Web 和移动应用程序,那么将数据存储在封装在 Lumen API 的数据库中将是完美的选择。

当您将可扩展性视为重要点时,您可能需要流明


v
vaibhavmht225

laravel 和 lumen 的主要区别在于,Laravel 可以有 artisan 命令,而 lumen 没有。


这不是真的,或者至少不是最新的。我对旧版本不太了解,但我安装了 lumen 7.x 并且我有工匠命令