Lumen与Laravel之间的异同

Ran*_*rki 174 php laravel lumen

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

luk*_*ter 197

更新(5.2)

使用最新版本的Lumen(5.2),Microframework专注于无状态API.
文件规定:

Lumen 5.2代表了减肥Lumen的转变,专注于提供无状态的JSON API.因此,框架不再包含会话和视图.如果您需要访问这些功能,则应使用完整的Laravel框架.


原始答案(<= 5.1)

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

Laravel是一个将许多组件粘合在一起的框架(第三方和Laravels自己的组件).现在,Lumen使用了许多相同的组件,但将引导过程降至最低.你可以说它是一种"不同的胶水",组件(因此很多功能)大多是相同的.

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

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

// $app->withFacades();
Run Code Online (Sandbox Code Playgroud)

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

对于路由,Lumen使用nikic/FastRoute而不是symfonys路由器,因为它执行得更好,并为微框架提供了另一个大的推动力.

除此之外,一切都和Laravel一样.

朗文读好

  • 如果我们开始取消注释功能以恢复功能,它会是那么快吗? (6认同)

d4n*_*yll 43

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

但是,您可以将Laravel组件添加到Lumen中以扩展它,因此它不仅用于微服务和API.但是,如果您的目标是将Lumen扩展为网站,那么您最好使用Laravel.

他们也有不同的用例.Lumen和Laravel打算一起工作.对于API和服务经常被调用,使用流明.对于面向用户的应用程序,请使用Laravel.


这个答案来自我写的一篇博文,解释了Lumen和Laravel之间的区别.

  • 假设我正在构建一个Web应用程序,并决定编写一个API来进一步分离逻辑(并允许容易的第三方应用程序).用Lumen编写API并用Laravel编写网站是不错的做法? (2认同)

Iva*_*kov 14

引自Matt Stauffer

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

你可以在这里阅读更多

  • 此外,Lumen不使用Symfony的路由组件.相反,nikic/fast-route用于提高性能. (4认同)
  • @prograhammer,我认为这个特殊功能不会被包含在Lumen中.我认为这需要一个Lumen故意废除的会议.另外,我没有看到使用API​​的`redirect() - > intention()`有多少用处,这是Lumen所关注的. (2认同)

Wah*_*nto 8

Laravel9.xLumen9.x

路由

基本的

特征 拉维尔 流明
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) 纳秒

重定向路线

特征 拉维尔 流明
基本的 Route::redirect($from, $to, $status); 纳秒
普雷曼特 Route::permanentRedirect($from, $to); 纳秒

查看路线

特征 拉维尔 流明
基本的 Route::view($from, $to); 纳秒

路由参数

特征 拉维尔 流明
参数 纳秒 纳秒
参数和依赖注入 纳秒 纳秒
所需参数 纳秒 纳秒
所需参数 纳秒 纳秒
正则表达式约束 纳秒 纳秒
全局约束 纳秒 纳秒

命名路线

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

路线组

特征 拉维尔 流明
中间件 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.') 纳秒

路由模型绑定

特征 拉维尔 流明
隐式绑定 纳秒 纳秒
隐式枚举绑定 纳秒 纳秒
显式绑定 纳秒 纳秒

后备路线

特征 拉维尔 流明
基本的 Route::fallback() 纳秒

路由缓存

特征 拉维尔 流明
基本的 纳秒 纳秒

中间件

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

跨站请求伪造保护

特征 拉维尔 流明
基本的 纳秒 纳秒

自 Lumen 版本起删除了 CSRF5.2


控制器

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

要求

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

回复

特征 拉维尔 流明
将标头附加到响应 纳秒 纳秒
将 Cookie 附加到响应 纳秒 纳秒
重定向 纳秒 纳秒
查看回复 纳秒 纳秒
JSON 响应 纳秒 纳秒
文件下载 纳秒 纳秒
文件回应 纳秒 纳秒

视图和刀片

特征 拉维尔 流明
基本的 纳秒 纳秒
刀刃 纳秒 纳秒

会议

特征 拉维尔 流明
基本的 纳秒 纳秒

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


验证

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

错误和日志记录

特征 拉维尔 流明
错误 纳秒 纳秒
记录 纳秒 纳秒

工匠控制台

特征 拉维尔 流明
运行命令 纳秒 纳秒
编写命令 纳秒 纳秒

缓存

特征 拉维尔 流明
基本的 纳秒 纳秒

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

Redis 支持

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

$app->register(Illuminate\Redis\RedisServiceProvider::class);
Run Code Online (Sandbox Code Playgroud)

如果您还没有调用$app->withEloquent()您的bootstrap/app.php文件,那么您应该调用$app->configure('database');bootstrap/app.php文件以确保 Redis 数据库配置已正确加载。


编译资产

特征 拉维尔 流明
混合 纳秒 纳秒

活动

特征 拉维尔 流明
基本的 纳秒 纳秒
发电机

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

注册事件/监听器

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

protected $listen = [
    'App\Events\ExampleEvent' => [
        'App\Listeners\ExampleListener',
    ],
];
Run Code Online (Sandbox Code Playgroud)
射击事件

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

event(new ExampleEvent);
Event::dispatch(new ExampleEvent);
Run Code Online (Sandbox Code Playgroud)

认证与授权