193

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

4

8 回答 8

198

更新 (5.2)

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

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


原始答案(<= 5.1)

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

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

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

除此之外,默认情况下会禁用更多功能,并且必须先激活它们才能使用。举个例子:Facades (like DB::table())
你首先需要取消注释这一行bootstrap/app.php来启用它们:

// $app->withFacades();

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

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

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

关于流明的好读物

于 2015-04-15T11:06:33.953 回答
48

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

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

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


这个答案取自我写的一篇博客文章,它解释了 Lumen 和 Laravel 之间的区别。

于 2015-04-16T07:41:59.660 回答
15

引用 Matt Stauffer 的话

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

你可以在这里阅读更多

于 2015-04-15T10:52:31.937 回答
4

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

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

于 2018-06-13T10:40:18.663 回答
2

Laravel9.x流明9.x

路由

基本的

特征 Laravel 流明
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) ns
所有 HTTP 动词 Route::any($uri, $callback) ns

重定向路线

特征 Laravel 流明
基本的 Route::redirect($from, $to, $status); ns
永久的 Route::permanentRedirect($from, $to); ns

查看路线

特征 Laravel 流明
基本的 Route::view($from, $to); ns

路由参数

特征 Laravel 流明
参数 ns ns
参数和依赖注入 ns ns
必需参数 ns ns
必需参数 ns ns
正则表达式约束 ns ns
全局约束 ns ns

命名路线

特征 Laravel 流明
基本的 Route::get($uri, $callback)->name('profile') $router->get($uri, ['as' => 'profile', $callback])
生成命名路由的 URL route('profile') route('profile')
按名称检查当前路由 $request->route()->named('profile')布尔值 ns

路由组

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

路由模型绑定

特征 Laravel 流明
隐式绑定 ns ns
隐式枚举绑定 ns ns
显式绑定 ns ns

后备路线

特征 Laravel 流明
基本的 Route::fallback() ns

路由缓存

特征 Laravel 流明
基本的 ns ns

中间件

特征 Laravel 流明
定义中间件 artisan make:middleware 手动的
全局中间件 ns ns
将中间件分配给路由 ns ns
中间件组 ns ns
中间件参数 ns ns
可终止的中间件 ns ns

CSRF 保护

特征 Laravel 流明
基本的 ns ns

自 Lumen 版本起移除 CSRF5.2


控制器

特征 Laravel 流明
定义控制器 artisan make:controller 手动的
基本的 ns ns
单动作控制器 ns ns
控制器中间件 ns ns
资源控制器 ns ns
依赖注入和控制器 ns ns

要求

特征 Laravel 流明
访问请求 ns ns
请求路径和方法 ns ns
请求标头 ns ns
请求 IP 地址 ns ns
内容协商 ns ns
PSR-7 请求 ns ns
检索输入 ns ns
确定输入是否存在 ns ns
合并附加输入 ns ns
旧输入 ns ns
饼干 ns ns
输入修整和归一化 ns ns
检索上传的文件 ns ns
移动上传的文件 ns ns

回复

特征 Laravel 流明
将标题附加到响应 ns ns
将 Cookie 附加到响应 ns ns
重定向 ns ns
查看回复 ns ns
JSON 响应 ns ns
文件下载 ns ns
文件响应 ns ns

视图和刀片

特征 Laravel 流明
基本的 ns ns
ns ns

会议

特征 Laravel 流明
基本的 ns ns

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


验证

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

错误和日志

特征 Laravel 流明
错误 ns ns
日志记录 ns ns

工匠控制台

特征 Laravel 流明
运行命令 ns ns
编写命令 ns ns

缓存

特征 Laravel 流明
基本的 ns ns

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

Redis 支持

在将 Redis 缓存与 Lumen 一起使用之前,您需要illuminate/redis通过 Composer 安装包。然后,您应该Illuminate\Redis\RedisServiceProviderbootstrap/app.php文件中注册:

$app->register(Illuminate\Redis\RedisServiceProvider::class);

$app->withEloquent()如果您尚未调用bootstrap/app.php文件,则应调用文件$app->configure('database');bootstrap/app.php确保正确加载 Redis 数据库配置。


编译资产

特征 Laravel 流明
混合 ns ns

活动

特征 Laravel 流明
基本的 ns ns
发电机

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

注册事件/监听器

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

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

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

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

认证与授权

特征 Laravel 流明
验证 ns ns
授权 ns ns
验证

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

授权
定义能力

与 Laravel 相比,在 Lumen 中使用授权的主要区别在于如何定义能力。在 Lumen 中,您可以简单地使用Gate外观AuthServiceProvider来定义能力:

Gate::define('update-post', function ($user, $post) {
    return $user->id === $post->user_id;
});
定义策略

与 Laravel 不同,Lumen$policiesAuthServiceProvider. 但是,您仍然可以从提供者的方法中调用外观policy上的方法:Gateboot

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 流明
基本查询 ns ns
查询生成器 ns ns
雄辩的 ORM ns ns
迁移 ns ns
播种机 ns ns

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


电子邮件验证和重置密码

特征 Laravel 流明
电子邮件验证 ns ns
重置密码 ns ns

加密和散列

特征 Laravel 流明
加密 ns ns
散列 ns ns

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


邮件

特征 Laravel 流明
基本的 ns ns

队列

特征 Laravel 流明
基本的 ns ns

Lumen 不支持关闭作业。

发电机

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

派遣工作

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

dispatch(new ExampleJob);

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

Queue::push(new ExampleJob);

服务容器

特征 Laravel 流明
基本的 ns ns
访问容器

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

解析实例

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

$instance = app(Something::class);

测试

特征 Laravel 流明
基本的 ns ns
于 2022-02-24T20:38:29.730 回答
1

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 的内置事件队列功能。
于 2021-11-22T09:06:01.890 回答
0

为什么是流明?

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

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

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

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

Laravel 框架的某些组件与其他包交换以提高性能。在这里检查它们

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

  • 您可能希望通过 API 向其他开发人员开放应用程序的某些功能
  • 您的应用程序需要同时支持 Web 和移动应用程序,那么将数据存储在封装在 Lumen API 的数据库中将是完美的选择。
  • 当您将可扩展性视为重要点时,您可能需要流明
于 2018-10-30T10:03:43.460 回答
-3

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

于 2019-11-28T10:26:01.877 回答