Laravel Livewire는 JavaScript 코드를 직접 작성하지 않고도 페이지에서 동적 동작을 구현하기 위한 훌륭한 도구입니다. 그리고 다른 도구와 마찬가지로 공식 문서와 개발자의 유용한 추가 팁을 포함하여 많은 "숨겨진 보석"이 있습니다. 나는 이 기사에서 그 중 일부를 편집하기로 결정했습니다. 시작해 봅시다!
1. render()
가 필요하지 않습니다.render()
典型的render()
方法看起来像这样:
// app/Http/Livewire/PostsShow.php class PostsShow extends Component { public function render() { return view('livewire.posts-show'); } }
但是,如果你的render()
方法只是一个单行来呈现 默认 视图,您可以从组件中删除该render()
方法,它仍然可以工作,从供应商的方法加载默认为render()
。【相关推荐:laravel视频教程】
class PostsShow extends Component { //这个空组件仍将工作并加载Blade文件 }
2. 子文件夹中的组件
如果你想在子文件夹中生成一个组件,比如app/Http/Livewire/Folder/Component.php
,你有两种方法:
php artisan make:livewire Folder/Component
或者
php artisan make:livewire folder.component
请注意,第一种方式是第一个字母大写,第二种方式是小写。在这两种情况下,都会生成两个文件:
- app/Http/Livewire/Folder/Component.php
- resources/views/livewire/folder/component.blade.php
如果子文件夹不存在,将自动创建它们。
3.非默认文件夹中的组件
如果您将某些外部包与 Livewire 组件一起使用,则您的 Livewire 组件可能位于与默认的 app/Http/Livewire
不同的文件夹中。您可能需要将其名称绑定到实际位置。
通常可以在app/Providers/AppServiceProvider.php
(或任何服务提供者)方法boot()
中完成:
class AppServiceProvider extends ServiceProvider { public function boot() { Livewire::component('shopping-cart', \Modules\Shop\Http\Livewire\Cart::class); } }
4.轻松重命名或移动组件
如果您在使用 make:livewire
生成组件时打错字,请不要担心。您不需要手动重命名两个文件,有一个命令供我们使用。
例如,如果您编写了php artisan make:livewire Prduct
,但您想要「Product」,并且还决定将其放入子文件夹中,则可以使用以下命令进行改进:
php artisan livewire:move Prduct Products/Show
结果将是这样的:
COMPONENT MOVED CLASS: app/Http/Livewire/Prduct.php => app/Http/Livewire/Products/Show.php VIEW: resources/views/livewire/prduct.blade.php => resources/views/livewire/products/show.blade.php
5.更改默认组件模板
Livewire 组件是使用默认模板生成的,即所谓的「存根」。它们隐藏在 Livewire 包的「vendor」文件夹中,但您也可以根据需要发布和编辑它们。
Run this command:
php artisan livewire:stubs
您会找到一个新文件夹 /stubs
,其中包含一些文件。stubs/livewire.stub
的示例:
<?php namespace [namespace]; use Livewire\Component; class [class] extends Component { public function render() { return view('[view]'); } }
例如,如果您想生成不使用 render()
方法的组件,只需将其从存根文件中删除,然后每次运行 php artisan make:livewire Component
,它都会从您更新的模板中获取「公共存根」。
6. 不要为了设置值而创建方法
如果您有一个会设置某个属性的某个值的Click事件,您可以这样:
<button wire:click="showText">Show</button>
然后
class Show extends Component { public $showText = false; public function showText() { $this->showText = true; } }
但实际上,您可以直接从vender文件为Livewire属性赋一个新值,而不需要在Livewire组件中有单独的方法。
以下是代码:
<button wire:click="$set('showText', true)">Show</button>
因此,如果您的属性是一个布尔变量,并且希望有一个显示/FALSE按钮,则您需要调用$set
并提供两个参数:您的属性名称和新值。
7. 更进一步:轻松设置 true/false
在上一个技巧之后,如果您的属性是一个带有true/false的布尔变量,并且您想要有一个显示/隐藏按钮,您可以这样:
<button wire:click="$toggle('showText')">Show/Hide</button>
注意:我个人会避免使用 Livewire 来实现这种简单的切换效果,因为它会向服务器添加额外的请求。
相反,最好使用 JavaScript,例如 Alpine.js:
<div x-data="{ open: false }"> <button @click="open = true">Expand</button> <span x-show="open"> Content... </span> </div>
8. 最小化服务器请求的三种方法
Livewire 的主要诟病之一是它对服务器的请求太多。如果您在输入字段中有wire:model
,则每次击键都可能会调用服务器以重新渲染组件。如果您有一些实时效果,例如「实时搜索」,那将非常方便。但通常,就性能而言,服务器请求可能非常昂贵。
但是,自定义 wire:model
的这种行为非常容易。
-
wire:model.debounce
:默认情况下,Livewire 在输入按键后等待 150 毫秒,然后再向服务器执行请求。 但您可以覆盖它:<input type="text" wire:model.debounce.1000ms="propertyName">
일반적인render()
메서드는 다음과 같습니다.class ContactForm extends Component { protected $validationAttributes = [ 'email' => 'email address' ]; // ... }
🎜그러나 만약render()
메서드는 🎜기본 보기를 렌더링하는 한 줄일 뿐입니다. 구성 요소에서render()
메서드를 제거해도 여전히 유지됩니다. 작업, 공급자로부터의 메서드 로딩은 기본적으로render()
로 설정됩니다. [관련 권장사항: laravel 동영상 튜토리얼]🎜<div> <button wire:click="checkout">Checkout</button> <div wire:loading> Processing Payment... </div> </div>
🎜🎜2 . 하위 폴더의 구성 요소🎜app/Http/Livewire/Folder/Component.php
와 같은 하위 폴더에 구성 요소를 생성하려면 두 가지 방법이 있습니다. 🎜<div wire:loading.delay.longer>...</div>
🎜 또는 🎜<div wire:offline> You are now offline. </div>
🎜 첫 번째 방법은 첫 글자를 대문자로 쓰는 것이고, 두 번째 방법은 소문자로 쓰는 것입니다. 두 경우 모두 🎜- app/Http/Livewire/Folder/Component.php
- resources/views/livewire/folder/comComponent.blade )라는 두 개의 파일이 생성됩니다. >
🎜🎜3. 기본이 아닌 폴더의 구성 요소🎜 Livewire 구성 요소와 함께 일부 외부 패키지를 사용하는 경우 Livewire 구성 요소가 기본와 동일한 폴더에 위치할 수 있습니다. app/Http/Livewire
를 다른 폴더에 넣으세요. 이름을 실제 위치에 바인딩해야 할 수도 있습니다. 🎜🎜이 작업은 일반적으로app/Providers/AppServiceProvider.php
(또는 모든 서비스 공급자) 메서드boot()
에서 수행할 수 있습니다. 🎜<div wire:offline.class="bg-red-300"></div>
🎜🎜4 . 구성 요소 이름을 쉽게 바꾸거나 이동할 수 있습니다.🎜make:livewire
를 사용하여 구성 요소를 생성할 때 오타가 있어도 걱정하지 마세요. 두 파일의 이름을 수동으로 바꿀 필요는 없습니다. 사용할 명령이 있습니다. 🎜🎜예를 들어,php artisan make:livewire Prduct
를 작성했지만 "제품"을 원하고 하위 폴더에 넣기로 결정한 경우 다음 명령을 사용하여 개선할 수 있습니다: 🎜class ShowPosts extends Component { use WithPagination; protected $paginationTheme = 'bootstrap';
🎜 결과는 다음과 같습니다:🎜class ShowPost extends Component{ public $post; public function mount(Post $post) { $this->post = $post; } }
🎜🎜5. 기본 구성 요소 템플릿 변경🎜Livewire 구성 요소는 소위 "스텁"이라는 기본 템플릿을 사용하여 생성됩니다. Livewire 패키지의 "vendor" 폴더에 숨겨져 있지만 필요에 따라 게시하고 편집할 수 있습니다. 🎜🎜다음 명령을 실행하세요:🎜@livewire('show-post', $post)
🎜일부 파일이 포함된 새 폴더/stubs
를 찾을 수 있습니다.stubs/livewire.stub
의 예: 🎜class ShowPost extends Component{ public Post $post; }
🎜예를 들어render()
메서드를 사용하지 않는 구성 요소를 생성하려면 다음을 수행하세요. 스텁 파일에서 이를 제거하고php artisan make:livewire Component
를 실행할 때마다 업데이트된 템플릿에서 "공개 스텁"을 가져옵니다. 🎜
🎜🎜6. 단지 값을 설정하기 위한 메서드를 만들지 마세요🎜속성 값을 설정하는 Click 이벤트가 있는 경우 다음을 수행할 수 있습니다. 🎜<button wire:click="delete($post->id)" onclick="return confirm('Are you sure?')">Delete</button>
🎜그러면 🎜<button onclick="confirm('Are you sure?') || event.stopImmediatePropagation()" wire:click="delete($post->id)">Delete</button>
🎜 그런데 실제로는 Livewire 컴포넌트에서 별도의 메소드 없이 Vendor 파일에서 직접 Livewire 속성에 새로운 값을 할당할 수 있습니다. 🎜🎜다음은 코드입니다: 🎜rrreee🎜따라서 속성이 부울 변수이고 SHOW/FALSE 버튼을 갖고 싶다면$set
를 호출하고 속성 이름이라는 두 가지 인수를 제공해야 합니다. 그리고 새로운 가치. 🎜
🎜🎜7. 한 단계 더 나아가서 쉽게 true/false를 설정하세요.🎜이전 팁에 이어 속성이 true/false를 갖는 부울 변수이고 표시/숨기기 버튼을 사용하면 다음과 같습니다: 🎜rrreee🎜🎜 참고: 저는 개인적으로 서버에 추가 요청을 추가하므로 이 간단한 토글 효과에 Livewire를 사용하는 것을 피하고 싶습니다. 🎜🎜대신 Alpine.js와 같은 JavaScript를 사용하는 것이 더 좋습니다. 🎜rrreee
🎜🎜8. 서버 요청을 최소화하는 세 가지 방법🎜 Livewire의 주요 비판 중 하나는 서버에 요청이 너무 많다는 것입니다. 입력 필드에wire:model
이 있는 경우 키를 누를 때마다 서버를 호출하여 구성 요소를 다시 렌더링할 수 있습니다. 라이브서치 등 실시간 효과가 있다면 매우 편리할 것 같습니다. 그러나 일반적으로 서버 요청은 성능 측면에서 매우 비쌀 수 있습니다. 🎜🎜그러나wire:model
의 이 동작을 사용자 정의하는 것은 매우 쉽습니다. 🎜- 🎜
wire:model.debounce
: 기본적으로 Livewire는 키 입력을 입력한 후 150밀리초를 기다린 후 서버 요청을 실행합니다. 하지만 이를 재정의할 수 있습니다:<input type="text" wire:model.debounce.1000ms="propertyName">
🎜 wire:model.lazy
:默认情况下,Livewire 会监听输入上的所有**事件,然后执行服务器请求。 通过提供lazy
指令,您可以告诉 Livewire 仅监听change
事件。 这意味着用户可以继续输入和更改,并且只有当用户点击离开该字段时才会触发服务器请求。wire:model.defer
:这不会在输入更改时触发服务器请求。 它将在内部保存新值并将其传递给下一个网络请求,该请求可能来自其他输入字段或其他按钮的点击。
9.自定义验证属性
Livewire 验证的工作方式与 Laravel 验证引擎非常相似,但有一些不同之处。在 Laravel 中,如果你想自定义属性的名称,你可以定义
attributes()
方法 在表单请求类中。在 Livewire 中,方法不同。 在组件中,您需要定义一个名为「$validationAttributes」的属性并在那里分配键值数组:
class ContactForm extends Component { protected $validationAttributes = [ 'email' => 'email address' ]; // ... }
这对于常见的错误消息很有用,例如「需要字段 XYZ」。默认情况下,该 XYZ 被替换为字段名称,用户可能不会理解这个的词,因此应该将其替换为更清晰的错误消息。
10. 加载提示
从我所见,官方文档中描述但很少使用的东西。如果某些动作在屏幕上需要一段时间,则应该显示一些加载指示符,例如旋转的 gif,或者只是「正在加载数据…」的文本
在 Livewire 中,它不仅易于实现,而且还易于定制。
处理数据的最简单示例:当服务器发出请求时,它将显示「正在处理付款…」文本,直到服务器请求完成并返回结果。
<div> <button wire:click="checkout">Checkout</button> <div wire:loading> Processing Payment... </div> </div>
在实践中,我喜欢仅在需要一段时间时才显示此类加载指示器。在所有可能的情况下,每次都重新渲染 DOM 是没有意义的。 如果我们只在请求时间超过 500 毫秒时才这样做呢?
这很简单:
<div wire:loading.delay.longer>...</div>
还有可能使用 CSS 类来加载状态,将它们附加到特定的操作,等等:阅读 [官方文档](laravel-livewire.com/docs/2.x/load... #states#toggling-elements)。
11. 离线指示器
Livewire 的另一个记录在案但鲜为人知的功能是告诉用户他们的互联网连接是否丢失。如果您的应用程序使用实时数据或屏幕上的多次更新,这将是非常有用的:您可能会模糊网页的某些部分并显示「离线」文本。
这也很简单:
<div wire:offline> You are now offline. </div>
此外,正如我所提到的,您可以通过分配 CSS 类来模糊某些元素,如下所示:
<div wire:offline.class="bg-red-300"></div>
12. 使用 Bootstrap 框架分页
与 Laravel 类似,Livewire 默认使用来自 Tailwind 框架的分页样式。 幸运的是,它很容易覆盖,只需为属性提供不同的值:
class ShowPosts extends Component { use WithPagination; protected $paginationTheme = 'bootstrap';
您可以直接在 Livewire Github 存储库 中查看可用的分页设计。 在浏览时,我没有找到任何关于使用 Bootstrap 4 还是 Bootstrap 5 版本的信息。
13. No Mount:自动路由模型绑定
如果您想将对象传递给 Livewire 组件,这是一种典型的方法,使用
mount()
方法:class ShowPost extends Component{ public $post; public function mount(Post $post) { $this->post = $post; } }
然后,在 Blade 的某个地方,使用:
@livewire('show-post', $post)
但是您是否知道,如果您为 Livewire 属性提供类型提示,路由模型绑定会自动生效?
class ShowPost extends Component{ public Post $post; }
就是这样,根本不需要
mount()
方法。
14.删除时的确认提示
如果您有一个「删除」按钮,并且您想在执行操作之前调用确认弹窗在 JavaScript 中,则此代码将无法在 Livewire 中正常工作:
<button wire:click="delete($post->id)" onclick="return confirm('Are you sure?')">Delete</button>
对此有一些可能的解决方案,可能最优雅的方法是在 Livewire 事件发生之前停止它:
<button onclick="confirm('Are you sure?') || event.stopImmediatePropagation()" wire:click="delete($post->id)">Delete</button>
event.stopImmediatePropagation()
如果确认结果是假的,将停止调用LiveWire方法。您可以在this Github issue discussion中找到一些其他可能的解决方案.
就是这样,一些LiveWire特征和小提示。希望对大家有用!
原文地址:https://laravel-news.com/laravel-livewire-tips-and-tricks
译文地址:https://learnku.com/laravel/t/66995
更多编程相关知识,请访问:编程教学!!
위 내용은 Laravel Livewire를 어떻게 사용하나요? 공유할 수 있는 14가지 실용적인 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

TocombatisolationandloneLinessInremotwork, componiesshouldimplementregular, meignmentfortuncations, andusetechnologyeftically

laravelispopularforfull-stackdevelopmentBecauseItOffersAMESAMLESSEAMLESTBBOCKENDPOWERANDFRONDENDFLECTION.1) itsBackEndCapabilities, likeeloquentorm, simplifydatabaseintercations.2) theBladetemplatingEngineallowsforclean, dynamichtmltemplates.3) larvelmix

화상 회의 플랫폼을 선택할 때의 주요 요소에는 사용자 인터페이스, 보안 및 기능이 포함됩니다. 1) 사용자 인터페이스는 줌과 같은 직관적이어야합니다. 2) 보안에주의를 기울여야하며 Microsoft Teams는 엔드 투 엔드 암호화를 제공합니다. 3) 기능은 요구 사항을 일치시키기 위해 필요하며 Googlemeet은 짧은 회의에 적합하며 Ciscowebex는 고급 협업 도구를 제공합니다.

Laravel10의 최신 버전은 MySQL 5.7 이상, PostgreSQL 9.6 이상, SQLite 3.8.8 이상, SQLServer 2017 이상과 호환됩니다. 이러한 버전은 JSON 데이터 유형 MySQL5.7과 같은 Laravel의 ORM 기능을 지원하여 쿼리 및 스토리지 효율성을 향상시키기 때문에 선택됩니다.

laravelisanexcellentchoiceforfull-stackdevelopmentduetoitsrobustfeaturesandeaseofuse.1) 1) itsimplifiescomplextaskswithitsmodernphpsyntaxandtoolslakeforfront-endandeloquentormforback-end.2) laravel'secosystem, entercancesancancesancancessancancesancancesancesancesancancesnan

LARAVEL10, RELEARTESTERSION. ISTHELATESTVERSION. ISTHELATESTERSION.ITFEATURES : 1) 개선 된 오류가 개선 된 사람을 사용하여 개선되었습니다.

thelatestlaravelversionenhancesdevelopmentwith : 1) simplifiedroutingusingiMplicitModelBinding, 2) enloquentCapabilities withNeweRyMethods, 및 3) 개선 된 개선 된 개선 된 kepportOndHefeatureslikeNameDarguments,

laravel.com/docs에서 최신 Laravel 버전의 릴리스 노트를 찾을 수 있습니다. 1) 릴리스 노트는 새로운 기능, 버그 수정 및 개선에 대한 자세한 정보를 제공합니다. 2) 새로운 기능의 적용을 이해하는 데 도움이되는 예와 설명이 포함되어 있습니다. 3) 새로운 기능의 잠재적 복잡성과 후진 호환성 문제에주의하십시오. 4) 릴리스 노트를 정기적으로 검토하면 업데이트를 유지하고 혁신을 고무시킬 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는
