iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
1
Software Development

30天完成家庭任務平台系列 第 23

30天完成家庭任務平台:第二十三天

  • 分享至 

  • xImage
  •  

家庭任務平台是使用Laravel的Blade樣板語言。

前端使用者介面通常會有同一元件出現在不同地方的狀況,重複複製貼上是很沒有效率的事,因此要考慮如何元件複用,而blade就提供了Component可以重複利用元件。

https://ithelp.ithome.com.tw/upload/images/20201008/20129592PW4OYI3L9H.png

假設現在任務(Tasks)也希望增加一個刪除的按鈕,而且希望元件跟計畫的刪除按鈕一樣,這時候就會需要能夠將固定值能夠轉成變數值。

<form class=" bg-blue-200" action="{{route('project.destory',['project'=>$project])}}" method="post">
    @csrf
    @method('DELETE')
    <button class="button-add " type="submit">Delete</button>
</form>

希望變數能藉由賦值$deletedType, $deletedSubject來動態決定是任務或計畫。

<form class=" bg-blue-200" action="{{route($deletedType.'.destory',[$deletedType => $deletedSubject])}}" method="post">
    @csrf
    @method('DELETE')
    <button class="button-add " type="submit">Delete</button>
</form>
  1. 做出元件

藉由php artisan make:component DeleteButton做出按鈕元件,此時會新增兩個檔案個別在App\View\Components和resources/views/components資料夾中:

(1) App\View\Components : DeleteButton
(2) resources/views/components:delete-button.blade.php

  1. 設定Component

因為希望能夠動態設定$deletedType,$deletedSubject的值,所以需要進行以下設定:

class DeleteButton extends Component
{
    public $deletedType;
    public $deletedSubject;
    /**
     * Create a new component instance.
     *
     * @return void
     */
    public function __construct($deletedType,$deletedSubject)
    {
        $this->deletedType = $deletedType;
        $this->deletedSubject = $deletedSubject;  
    }

    /**
     * Get the view / contents that represent the component.
     *
     * @return \Illuminate\View\View|string
     */
    public function render()
    {
        return view('components.delete-button');
    }
}

  1. 傳遞變數值

如果變數是原始值,如字串或整數等等,不需要在前面加上:,但如果變數是PHP表達式或是變數,則需要在前面加上:

<x-delete-button deletedType="project" :deletedSubject="$project" />
<x-delete-button deletedType="task" :deletedSubject="$task" />

參考文章:

Blade Template


上一篇
30天完成家庭任務平台:第二十二天
下一篇
30天完成家庭任務平台:第二十四天
系列文
30天完成家庭任務平台30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言