Jetstream 复杂了?分享两个 reddit 对 Laravel Jetstream 的长评论

Laravel

评论 1

以下评论来自 www.reddit.com/user/iLLogiKarl/

我想分享我在 Laravel 8 中使用 Jestream 和 Fortify 的第一次体验。我昨天决定试一试,我只能说我肯定会在未来的项目中尽量避免使用新的脚手架。也许我有空的时候会考虑自己做脚手架。

从我的角度来看,Auth 脚手架是 Laravel 长期以来最好的功能之一。它为你的应用程序提供了一个完美的(最小的)起点,而不会试图引导你朝某个特定方向前进,也不会让你承担太多工作。你只需输入 php artisan make:auth 就可以了。此功能为你提供了一些完美的默认控制器,你可以将其与你想要的任何类型的前端堆栈一起使用。你可以使用 HTML 中的原始的 Blade 模板构建前端,可以使用 Livewire 组件,甚至可以将 SPA 调整到现有端点。在你的 routes/web.php 中有一个 Auth::routes(),并且很清楚这些路由来自哪里以及它们到达哪个端点。想要添加或改变一些行为?没问题 - 只需转到你的身份验证控制器并覆盖你想要覆盖的任何方法。

当我第一次使用 Jetstream 时,我决定先尝试一下 Livewire ,因为我觉得这应该是「侵入」最小的脚手架工具(最容易上手的)。你可以在 pest 和 cholera 之间选择一个。即便我每天都在用 Livewire 和 Tailwind ,我也很难用它从头开始构建一个应用。因为它提供的 auth 组件 全部都是 自定义生成的。如果我想编辑的这些组件就需要在 Jetstream 的资源中找到这些组件并把它们放到我的项目中。IDE 会给我提示一堆未提交的文件,我需要编辑这些组件,并令它与我的应用布局和设计相匹配。

接下来我想研究新的登录/注册/密码逻辑并在代码中寻找对应的控制器。我发现这些逻辑已经被抽象的封装起来了。代码中并没有那么多的控制器。所有基本上需要几百行代码的身份验证逻辑都被完全过度抽象并隐藏在一大堆接口、契约(Contracts)和闭包中,我需要剖析这些逻辑,以了解它是如何在幕后工作的。

我遇到的另一个问题是默认启用的大量功能。你可以在 Providers 中启用某些特性或功能,而其他一些特性或功能仅在某些配置文件中启用。一切都溅到了其他地方。虽然你已经驯服了 Jetstream - 好吧,让我为你唱 Fortify 之歌。我又花了 10 分钟弄清楚如何将一个简单的数据数组添加到注册功能的视图中。原来你需要在你的 FortifyProvider 中放置一些覆盖关闭方法。

我对 Laravel 既不陌生,也不是不熟悉 Tailwind、Livewire 或框架核心本身。但与我在 Laravel 7 中使用的体验相比,在 Laravel 8 中使用 Jetstream 的新脚手架完全是一团糟。脚手架默认启用个人资料照片功能?这是认真的吗?请从框架中删除这些东西并将其放入一些 99 美元的包中吧!这就是 Laravel 社区的习惯。过去,每当有 PR 向框架添加「太多功能」时,泰勒认为不是每个人都会从中受益,这样的 PR 就被拒绝了。现在我并没有想到一些简单的东西,如身份验证、电子邮件验证和密码重置功能会如何变得那么臃肿,我真的不敢想象未来会给我带来什么。

评论 2

以下评论来自 www.reddit.com/user/parasume/

我一直是 Laravel 的粉丝/用户,并且还为 Framework/Laravel 存储库做出了贡献。 尽管 Jetstream 具有出色的功能,但即使是我也觉得它不是最好的入门包,原因如下:

  1. Jetstream 仅提供 2 个堆栈 - Livewire 和 Inertia。 这两个堆栈都非常年轻,没有太多的社区支持或文档。 事实上,官方的 Livewire 截屏是付费的。 并不是说他们不应该这样做,Caleb 确实做了很多工作,但鉴于缺乏文档和支持,这两个不应该是唯一的选择!

  2. 我知道 Taylor 认为 Livewire 是基于 Blade,但老实说,它不仅仅是 Blade,它是一个全新的框架(包含事件、钩子、动作等)。 调试 Livewire 并不像 Blade 这样简单。

  3. Inertia似乎比 Livewire 有更大的学习曲线。 现在,你需要了解 Laravel、Inertia 和受支持的 JS 框架(Vue/React/Svelte)。 祝你学习一切顺利!

  4. 入门包应该对初学者友好。 以前支持 Bootstrap(不需要 JS)、React 和 Vue 预设。 现在不再支持 Laravel/UI,仅支持 2 个全新的框架。 没有对 React/Vue/Bootstrap 的入门包支持。 为什么?! 初学者友好? 我想不是。

  5. 更重要的是代码的复杂度显着增加。 曾经是有一个RegisterControllerConfirmPasswordController等。无论你想使用什么UI预设,控制器都保持不变。 现在,Livewire 、 Inertia 有一组完全不同的代码。 为什么? 因为它们都是后端和前端代码的混合体。 由于决定只为这 2 个框架提供支持,因此你将后端代码拆分为 Action、Livewire 组件和 Livewire/Inertia 控制器! 初学者友好?

  6. 我们以登录为例。在 Laravel 8 之前,LoginController@showLoginForm 会返回登录视图(作为存根存在),LoginController@login 会进行登录,LoginController@logout 会注销

  7. 现在在 Laravel 8 中,登录视图将首先由 Fortify 的 AuthenticatedSessionController@create 返回。这将返回一个扩展了 Responsable 接口的 LoginViewResponse 接口实现。此接口在服务容器中绑定到从 Fortify 类传递的 auth.login 视图的 SimpleViewResponse ,其中视图前缀是从 JetstreamServiceProvider 分配的,并且视图作为 Jetstream 中的存根存在。嗯,好吧,这只是为了返回一个视图。

  8. 老实说,我认为可以像上面那样(在 #6 和 #7 中)添加额外的复杂性来分离后端身份验证逻辑(由 Fortify 完成)和前端视图逻辑(由 Jetstream 完成)。但是,增加 Livewire 和 Inertia 的复杂性超出了我的范围。他们有不同的控制器,他们的 Fortify/Jetstream 动作中的逻辑,当然还有 Livewire 组件中的一些其他逻辑 - 所以后端完全是混乱的。过去,你发布了一个存根,并且你在控制器中拥有逻辑或在控制器中提取了一个特征,例如 AuthenticatesUsers,如果你更改 UI 预设,后端逻辑不会改变!易于理解,易于修改。现在,尝试修改内置的身份验证脚手架得有好运,你最好重新编写逻辑。

我知道 Laravel 是免费软件。我知道 Jetstream 有一些很棒的功能 - 2FA、注销其他用户、团队等。我知道 Taylor 是 Laravel 的核心 - 他会审查每个拉取请求,除非他完全了解正在发生的事情并且如果他认为他不会合并有一个更好的方法,他继续重写整个逻辑!我一直在为 Laravel 做出贡献,而 Laravel 之所以漂亮且编写代码很有趣(与其他未命名的框架不同),是因为 Taylor!

但是,我认为 Laravel 之所以受到欢迎,是因为它是一个非常自以为是的框架,非常易于使用并且有很好的文档记录。这个想法我坚信了相当长的一段时间!我确信 Symfony 有更多 Laravel 可以支持的「适配器(adapters)」和「驱动程序(drivers)」,但它很难使用,很难学习,也没有很好的文档记录。

随着 UI 脚手架的这一重大变化——从 Bootstrap、Vue 和 React 等流行框架中移除支持——并支持更复杂和年轻的框架,如 Livewire 和 Inertia,Laravel 最初的脚手架对于初学者来说肯定变得更加难以使用,甚至长期 Laravel 用户。在我看来,这肯定违背了 Laravel 的核心优势。

是的,我们中的许多人都可以创建自己的脚手架。但这需要时间和精力。此外,初学者不能像以前那样简单地玩 Laravel 的骨架。值得深思!

P.S:Taylor 发推文说在引入 Vue 脚手架的时候也有类似的争议。我不同意。 Vue 并没有剥夺 React 或 Bootstrap 的支持。这是一个额外的选择。此外,很多人都说总是可以选择使用 Laravel/UI——好吧,它不再受支持,这是一件大事。此外,令人敬畏的 Jetstream 功能在 Laravel/UI 中不可用,这意味着它们不支持 React/Vue/Bootstrap。也就是说我们现在只支持这两个框架!

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://www.reddit.com/r/laravel/comment...

译文地址:https://learnku.com/laravel/t/52598

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

确实感觉增加不必要的学习成本,为了一个登录注册功能,去学习两个完全陌生的框架,关键是这两个框架还非常的年轻,年轻意味着生态不够健全。有人说是可选的,但原来开箱即用的登录注册不也很好嘛,如果让我选择,我更倾向于laravel/ui

3年前 评论

确实感觉增加不必要的学习成本,为了一个登录注册功能,去学习两个完全陌生的框架,关键是这两个框架还非常的年轻,年轻意味着生态不够健全。有人说是可选的,但原来开箱即用的登录注册不也很好嘛,如果让我选择,我更倾向于laravel/ui

3年前 评论

最近開始研究 Jetstream
個人本來就想學習前端的技術,我覺得這可以當作一個學習的機會
但是以過去使用 Fortify (Jetstream 的後端驗證)的經驗來說,在客製化上,Fortify 並沒有 laravel/ui 這麼淺顯易懂
在個人項目上,我改用之後推出的 Breeze,用起來跟 laravel/ui 幾乎沒有差別

3年前 评论
诺墨

翻译片段的过程中感触良多,深切的感受到来自用户视角,为开发者考虑,真真切切对框架的感情。诚惶诚恐,怕是没有翻译出用户那种深刻与内心的痛心 :disappointed:

1年前 评论
Summer

是搞复杂了

1年前 评论

跟 Meteor 一样,充满了魔法。

1年前 评论
Tomo11111

基本上只用 laravel 写 api 了。

1年前 评论
williamQian 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!