Laravel Livewire:组件还是控制器? [关闭]

Posted

技术标签:

【中文标题】Laravel Livewire:组件还是控制器? [关闭]【英文标题】:Laravel Livewire: Components or Controllers? [closed] 【发布时间】:2021-01-10 06:38:01 【问题描述】:

我正在学习使用 Livewire,我发现我可以使用像控制器这样的组件,到目前为止,我已经能够管理视图、数据,并使用组件内部的路由模型绑定进行一些 CRUD 操作。

我应该使用组件而不是控制器吗?还是我应该继续使用控制器并将组件仅用于前端的东西?

最佳做法是什么?

【问题讨论】:

特别是对于 Livewire,组件类通常比控制器更好地使用,但使用控制器来代替也没有什么问题。 Livewire 的创建者 Caleb 意识到他已经一年多没有编写过一个控制器了,因为 Livewire 允许他将它提取到组件的 php 类中。但最终,它有点固执己见 - 为您的应用程序做最自然和最简单的事情。 【参考方案1】:

这完全取决于您在构建应用程序时感觉如何。这两种方式都不是最佳实践,但您可能会欣赏在任何地方使用组件的一致性。

我见过一些 Livewire 应用程序,它们采用最小的方法,只是将 Livewire 组件嵌套在其标准控制器驱动的应用程序中。如果您将现有应用程序缓和到 Livewire 中,这是完美的,因为它允许您一次转换部分应用程序。但是,如果我从头开始构建应用程序,我不会采用这种方法。

我更喜欢完全放弃控制器。我喜欢拥有一个完整的 Livewire 组件层次结构来代表我的应用程序,我的页面组件位于初级级别,然后任何嵌套组件位于同名目录中。让我们举个例子-

app/Http/Livewire
- Account.php                   < Account page component
- Account                       < Account page nested components directory
  - UpdateNameForm.php          < Nested update name component
  - UpdatePasswordForm.php      < Nested update password component
  - DeleteForm.php              < Nested account deletion component
- Dashboard.php                 < Dashboard page component

对我来说,我的某些页面组件是否是静态的并不重要。与控制器相比,使用 Livewire 渲染视图并没有任何显着的性能开销。您确切地知道在哪里查找大量应用程序逻辑,而无需深入了解页面是否是动态的。您还可以从 Livewire 提供的一些贴心功能中受益,例如使用类型化组件属性的路由模型绑定。如果您遵循默认文件命名约定,您甚至可以删除组件的 render() 方法。

【讨论】:

以上是关于Laravel Livewire:组件还是控制器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Livewire:在选择输入的更改上传递选项值

Laravel Livewire:输入选择,选择默认选项

Laravel Livewire,两个 livewire 组件之间的通信

laravel - livewire 整页组件

Laravel 和 Livewire:组件更改时如何执行 javascript 函数?

在 Laravel 8 Jetstream 的 Blade 组件中绑定 Livewire 属性