iT邦幫忙

2024 iThome 鐵人賽

DAY 13
1
自我挑戰組

PHP框架-Laravel自學挑戰系列 第 13

DAY13 - Laravel Livewire 前端框架: 讓撰寫程式碼更容易!

  • 分享至 

  • xImage
  •  

哈囉大家好~
在實作對資料庫數據進行操作前,還是想要先完成可以從前端接收使用者input的部分開始做,
畢竟之後做小專案也是會用到/images/emoticon/emoticon16.gif
所以還是決定要先解決前端的問題XD

之前嘗試使用blade template來撰寫前端,發現會需要在原PHP檔裡寫很多原生JavaScript,需要花很多時間,長篇幅的程式碼也讓易讀性降低。
在官方文檔裡查找了一下,Laravel Livewire前端框架支援開發者可以在不需要寫大量JavaScript程式碼的狀況下,實現動態、互動式的應用程式。

以下簡單整理的Livewire的特色:(BY 官方)

  1. 以Component為架構:製作可以重複使用的component!
    Livewire component = PHP(Logic) + blade(UI)
  2. 自動處理狀態更新:Livewire 自動發送 AJAX 請求給伺服器來處理邏輯,將更新的HTML返回前端。
  3. PHP處理前後端的互動:用PHP撰寫程式碼,避免複雜繁瑣的JavaScript開發。
  4. 即時DOM更新:不需要刷新頁面,可以即時更新UI(eg.表單驗證、塞選過濾⋯⋯等)。

那Livewire具體想要解決使用blade template上什麼樣的問題呢?

  1. 提升開發效率:語法和大部分主流前端框架類似,開發者可以很快上手。
  2. 降低寫JavaScript的比例:Liveware 處理動態互動的功能,讓開發者可以專注在撰寫PHP的邏輯。
  3. 前後端邏輯整合:不需要切換前後端的開發思維,將邏輯整合。

大致了解Livewire後,來試試看手感到底好不好XD

livewire在初次啟動Laravel專案時並沒有自動安裝,所以必須另外利用composer安裝套件:

composer require livewire/livewire

接下來就來實際創建一個component試試~
一樣用artisan命令列來創建component-navbar

php artisan make:livewire navbar

執行完成後就可以看到App/livewire目錄裡面有剛剛創建的navbar component(Navbar.php)
初始的程式碼內容如下:

<?php
namespace App\Livewire;

use Livewire\Component;

class Navbar extends Component
{
    public function render()
    {
        return view('livewire.navbar');
    }
}

除了這個檔案之外,也會在resources/views/livewire目錄底下找到對應component顯示的畫面:
(navbar.blade.php)

<div>
    {{-- Close your eyes. Count to one. That is how long forever feels. --}}
</div>

(官方的語錄也太浪漫了/images/emoticon/emoticon46.gif

接著在navbar.blade.php中撰寫簡單的navbar:

<div>
    <h1>{{ $title }}</h1>
    <p>姓名: {{ $name }}</p>
    <ul>
        <li><a href="#hello">哈囉</a></li>
        <li><a href="#hi">你好</a></li>
        <li><a href="#night">晚安</a></li>
        <li><a href="#bye">掰掰</a></li>
    </ul>
</div>

這裡用到了兩個參數$title和$name,在這裡用到的變數必須要在Navbar.php裡面定義好:

<?php

namespace App\Livewire;

use Livewire\Component;

class Navbar extends Component
{
    public $title = 'IT 鐵人賽 - GOGO';
    public $name = '';
    public function render()
    {
        return view('livewire.navbar');
    }
}

這裡比較特別的是,我想要讓$name這個變數的值從外面傳進來,所以我把這個component放到另一個blade template中:(main.blade.php)

<!DOCTYPE HTML>
<html>
    <head></head>
    <body>
        <livewire:Navbar name="阿寶"/> #插入component,傳入name參數
        <h1>我是內容~</h1>
    </body>
</html>

在插入component的時候,要用<livewire:Component名稱 />這樣的形式撰寫!
個人認為livewire的語法和概念都非常像其他前端框架,所以寫起來也比較順手~
畫面上就會看到兩個不同blade拼在一起的畫面:
https://ithelp.ithome.com.tw/upload/images/20240913/20168986LeX9uyjyES.png

剛剛瀏覽一下文檔中的其他內容,發現liveware也有支援各個component之間的溝通,event handling⋯⋯等。功能非常強大呢!
當然習慣其他框架的話也可以用inertia這個套件來輔助開發~
因為支援的功能很多,沒有辦法全部學完,只好邊做邊學了XD


今天對於Laravel livewire前端框架的介紹就到這邊簡單結束啦~
感覺在livewire的幫助下後面的小專案可以開發得更有效率/images/emoticon/emoticon07.gif
那就明天見了 byebye~


上一篇
DAY 12 - 認識Laravel框架中的migration:資料庫結構管理
下一篇
DAY 14 - 用Laravel Livewire前端框架撰寫Form (上)
系列文
PHP框架-Laravel自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ningyungame
iT邦新手 1 級 ‧ 2024-09-14 00:30:56

不夠看/images/emoticon/emoticon02.gif
希望能多講解一些範例

阿寶 iT邦新手 5 級 ‧ 2024-09-14 15:29:02 檢舉

沒問題!!之後來做做看其他功能/images/emoticon/emoticon08.gif

我要留言

立即登入留言