Laravel Livewire:组件还是控制器?

问题描述

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

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

哪种是最佳做法?

解决方法

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

我看过一些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()方法。