本篇文章给大家介绍一下怎么不使用一行 JS 代码,只使用 Laravel Livewire 来构建实时搜索功能,希望对大家有所帮助!
最终结果-完全交互式搜索和分页,无需Javascript
对于关注 Laracon 2019年的人来说,你们可能已经看到了来自Caleb Porzio被称为Livewire.的令人惊叹的新套餐。正如他的网站上所描述的那样:
livewire是一个针对Laravel的全栈框架,它使构建动态前端变得像编写普通PHP一样简单(从字面上看)。
我两年前开始使用Laravel,我最大的挑战之一就是构建互动页面。Laravel让我很容易跳入Web开发,但我发现跳到使用Vue.js或Reaction太令人困惑,总是导致另一层复杂性。当Caleb展示他的简单计数器时,我立即认为Livewire将是搜索的理想选择。我已经在下面概述了如何使用Livewire通过分页交互式搜索雄辩的记录。
设置 Livewire (文档)
composer require calebporzio/livewire
将其包含在你要搜索的所有页面结束正文标签之前:
@livewireAssets </body> </html>
Livewire 的工作原理是将前端 Livewire 组件中的数据直接连接到后端 Livewire 控制器。然后,这些控制器可以重新呈现组件,而不需要重新加载整个页面。我们的目标是将搜索查询从输入表单传递到后端,然后使用它来搜索我们的 Eloquent 模型。每次搜索将更新页面上显示的数据!
填充数据库 (选做)
在此示例中使用的是全新的 Laravel 应用程序。如果你使用的是现成的应用程序,可以跳过这一步,但是为了有一些数据来搜索,你可以用 Laravel 的默认用户工厂类来填充用户表。将以下代码添加到您的DatabaseSeeder.php
文件:
然后运行 php artisan db:seed
, 你将有500个用户可以搜索!
创建搜索组件
首先,让我们创建搜索控制器和 Livewire 视图:
php artisan make:livewire search
这将在 App\Http\Livewire
下创建一个新的名称为 Search.php
的「控制器」。 它还会在 Livewire views 文件夹中创建一个名为 search.blade.php
的视图文件。
创建搜索框 + 公共变量
让我们从 search.blade.php
开始,添加一个输入表单并绑定到 Livewire:
<input type="text" wire:model="searchTerm" />
通过设置 wire:model="searchTerm"
Livewire 将自动更新 Search.php
控制器中名为 $searchTerm
的公共变量。 现在我们来添加一下:
我把它包含在默认的 Laravel 主页上,但是你可以把它添加到任何你喜欢的页面上。 只需要在 blade 文件中添加 @livewire('search')
就可以了。 这是我们现在得到的:
显示 Eloquent 记录
首先将所有用户传递给组件,并在一个简单的列表中显示它们(尚未进行搜索)。 因为我们要使它具有交互性,所以需要在 search.blade.php
文件中完成这些操作。 只需创建另一个名为 $users
的公共变量,并设置其值为 User:: all()
。
现在当页面渲染时,它将向搜索视图传递一个名为 $users
的变量。 我们可以像平常一样使用 Blade,循环遍历所有用户:
现在我们看到所有的用户:
搜索 Eloquent
为了得到我们想要的结果,我们希望根据用户搜索的内容过滤列表数据。 与直接将 User::all()
返回到页面不同,我们将使用 SQL 的内置 ilike
子句来搜索数据库以匹配记录。 因为有些用户可能只搜索姓名或中间名,所以我们可以在搜索关键词周围使用 %
号,表示关键词两边的任意数量的字符。 所有这些实现加起来是这样的:
就是这样! 打开网页,我们现在可以立即搜索所有的结果。 不用写一行 Javascript 代码!
使用 Livewire 的全交互式搜索组件
如何分页?
我们的一些用户有数百页的内容,我们需要一个简单的方法来交互式搜索和对所有的结果分页。 下面的步骤将使用Livewire 配合 Laravel 的默认分页。
分页 + 显示
首先,添加默认分页链接 {{$users->onEachSide(1)->links()}}
到search.blade.php
来显示分页。 为了使用 Eloquent 分页, 则需要更新查询语句为: $this->users = User::where('name', 'ilike', $searchTerm)->paginate(10);
分页链接现在出来了,并且实际有效! 但是,您可能会注意到,每次点击都会重新加载整个页面,当尝试搜索和切换页面时,它会抛出一个错误。 我们需要更新默认的分页视图来使用 Livewire,让它不会重新加载整个页面。
创建自定义分页
与其构建一个全新的分页系统,不如使用默认的分页系统并使用新的 Livewire 功能对其进行修改。可以在 resources/views/vendor/pagination/
找到默认的 Bootstrap 分页 作为 bootstrap-4.blade.php
。我们可以看到每个按钮和页码都是设置为上一个或下一个URL的链接:
让我们复制整个文件并创建一个名为 livewire-pagination.blade.php
的新自定义分页视图。然后删除整个文档中的所有 href=”url”
链接(应该有三个),并将它们设置成 href=”#”
,以使页面不会重新加载。最后给每个链接添加一个 Livewire click 的方法
wire:click="setPage('{{$paginator->previousPageURL()}}')"
更新后的分页看起来像这样:
我们还需要使用新方法 setPage(url)
更新我们的控制器:
要显示此自定义的分页,我们可以通过向 links 函数传递路径直接在 blade 视图模板中链接到它:
{{$users->onEachSide(1)->links('livewire-pagination')}}
在 Controller 中更新分页
现在,我们需要一种方法来基于所选的当前页面来更新分页结果和组件。Laravel 的 Paginator 自带了 currentPageResolver()
方法使我们可以预先设置要展示的页面。我们可以将当前页码传递给此方法,它将自动更新结果。
为了获得选定的页码,我们需要将传递到 setPage($url)
方法中的 url 分开。我们还必须声明一个公共的 $currentPage
。看起来像这样:
现在只要单击分页按钮,结果就会更新以显示正确的页面。当用户搜索时,他们的结果也将被分页,并且每次搜索时分页都将重置以避免混淆:
希望这会对你有所帮助!我计划继续进行此工作,因此请让我知道任何想法/问题。您可以在Twitter上关注我@branickweix
原文地址:https://medium.com/@branick/search-with-laravel-livewire-cb6dcd4ad541
译文地址:https://learnku.com/laravel/t/40775
【相关推荐:laravel视频教程】
以上是无需JS, 用 Laravel Livewire构建实时搜索功能的详细内容。更多信息请关注PHP中文网其他相关文章!

在这个技术不断进步的时代,掌握先进的框架对于现代程序员至关重要。本文将通过分享 Laravel 框架中鲜为人知的技巧,帮助你提升开发技能。Laravel 以其优雅的语法和广泛的功能而闻名,本文将深入探讨其强大的特性,提供实用技巧和窍门,帮助你打造高效且维护性高的 Web 应用程序。

Laravel 和 ThinkPHP 都是流行的 PHP 框架,在开发中各有优缺点。本文将深入比较这两者,重点介绍它们的架构、特性和性能差异,以帮助开发者根据其特定项目需求做出明智的选择。

在 Laravel 中构建用户登录功能是一个至关重要的任务,本文将提供一个全面的概述,涵盖从用户注册到登录验证的每个关键步骤。我们将深入探讨 Laravel 的内置验证功能的强大功能,并指导您自定义和扩展登录过程以满足特定需求。通过遵循这些一步一步的说明,您可以创建安全可靠的登录系统,为您的 Laravel 应用程序的用户提供无缝的访问体验。

在面向初学者的 Laravel 框架版本选择指南中,本文深入探讨了 Laravel 的版本差异,旨在协助初学者在众多版本之间做出明智的选择。我们将重点介绍每个版本的关键特征、比较它们的优缺点,并提供有用的建议,帮助新手根据他们的技能水准和项目需求挑选最合适的 Laravel 版本。对于初学者来说,选择一个合适的 Laravel 版本至关重要,因为它可以显著影响他们的学习曲线和整体开发体验。

Laravel框架内置了多种方法来方便地查看其版本号,满足开发者的不同需求。本文将探讨这些方法,包括使用Composer命令行工具、访问.env文件或通过PHP代码获取版本信息。这些方法对于维护和管理Laravel应用程序的版本控制至关重要。

Laravel 是一个基于 PHP 的流行 Web 应用程序框架,因其优雅的语法和强大的功能而广受开发人员欢迎。它的最新版本引入了许多改进和新功能,旨在提升开发体验和应用程序性能。本文将深入探讨 Laravel 的最新方法,重点介绍如何利用这些更新来构建更强大、更高效的 Web 应用程序。

文章摘要:本文提供了详细分步说明,指导读者如何轻松安装 Laravel 框架。Laravel 是一个功能强大的 PHP 框架,它 упростил 和加快了 web 应用程序的开发过程。本教程涵盖了从系统要求到配置数据库和设置路由等各个方面的安装过程。通过遵循这些步骤,读者可以快速高效地为他们的 Laravel 项目打下坚实的基础。

想要学习 Laravel 框架,但苦于没有资源或经济压力?本文为你提供了免费学习 Laravel 的途径,教你如何利用网络平台、文档和社区论坛等资源,从入门到掌握,为你的 PHP 开发之旅奠定坚实基础。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。