iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
Modern Web

Laravel實作 —系列 第 17

[Day 17] Laravel實作 -- delete人生show出地獄

  • 分享至 

  • xImage
  •  

昨天我們寫了edit、update,不知道有沒有人和我一樣過完連假有超嚴重的星期一症候群完全提不起精神呢?但是不管怎麼樣走在laravel上的腳步依舊不能停,不然被地獄之火吞噬之後會完全不想寫,我們今天要來寫show、delete。

首先我們先來看看我們的首頁:

https://ithelp.ithome.com.tw/upload/images/20231002/20163142yufukjyg6J.png

我們目前只能看到前面的簡介和名字,但我們無法看到整篇文章,這樣並不符合我們的期望,所以我們今天要寫show,讓我們能夠查看整篇文章。

那我們要從哪裡進去呢?我們的預設是從他的標題進去,也就是說如果我們點了標題我們就能夠進到show之中,那我們先來將我們的標題改成超連結吧,先到 resources\views\articles\index.blade.php

<div class="font-semibold px-4">
    <a href = "{{ route('articles.show') }}"> {{ $article->title }} </a> 
</div>

https://ithelp.ithome.com.tw/upload/images/20231002/20163142h1ryLvIKV0.png

欸,為甚麼會出現這個報錯呢?上面寫說missinf required parameter,原來是每一個funtion所要求的都不同,在這show要求要有一個參數,故我們需要改他一個參數,那這個參數當然是這篇文章的id,這樣我們才能夠透過標題找到文章,故改正我們的程式碼:

<div class="font-semibold px-4">
    <a href = "{{ route('articles.show', $article) }}"> {{ $article->title }} </a> 
</div>

接著我們進controller將show寫完,打開app\Http\Controllers\ArticleController.php

    /**
     * Display the specified resource.
     */
    public function show(Article $article)
    {
        return view('articles.show', ['article' => $article] );
    }

show的功能非常單純,只需要展示文章的內容就可以了,於是我們去補齊我們的blade。

<x-app-layout>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 leading-tight">
            {{ __('活動內容') }}
        </h2>
    </x-slot>
	
    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
                <div class="p-6 text-gray-900">
                    <h1 class = 'font-semibold text-3xl py-6 text-center'> {{ $article->title }}</h1>
                    <p class = "text-lg text-gray-700 py-2 px-6 whitespace-pre-wrap leading-relaxed">
                        {{ $article -> content }}
                    </P>

                    <div class="text-center px-12 pb-4">
		         <a href = "{{route('dashboard')}}"> {{ __("回活動列表") }} </a>
                    </div>

                </div>
            </div>
        </div>
    </div>
</x-app-layout>

我們從我們的$article中找到需要的title以及content,接著就可以輕鬆地顯示我們的文章。

https://ithelp.ithome.com.tw/upload/images/20231002/201631426TSwEA3A1X.png

接下來我們要寫delete,我們先在編輯的按鈕旁邊新增一個刪除的按鈕,那我們先回到index的blade中,resources\views\articles\index.blade.php

@if ($article->user->is(auth()->user()))
							
	<button type = "submit" class="px-3 py-1 rounded bg-gray-800 text-white hover:bg-gray-700">
	<a href = "{{route('articles.edit', $article)}}"> {{__("修改活動")}}</a>
	</button> 

    <form method="POST" action="{{ route('articles.destroy', $article) }}">
        @csrf
        @method('delete')
	    <button type = "submit" class="px-3 py-1 rounded bg-gray-800 text-white hover:bg-gray-700">
	        <a href = "{{route('articles.destroy', $article)}}"> {{ __("刪除") }}</a>
	    </button> 
    </form>
@endif

我們destory的方法要用delete,要記得寫上去@method('delete'),那delete不需要blade,因為他的工作只是刪除並沒有需要view,那我們回到controller去今delete的function補完。app\Http\Controllers\ArticleController.php

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Article $article)
    {
        $article = auth() -> user() -> articles -> find($article);
        $article -> delete();
        return redirect() -> route('dashboard');
    }

delete好像這樣就完成了,但是如果你們還記得的話,article我們當他設定了一個特別的刪除方式:softDeletes(),如果忘記這是甚麼的可以到第9天去看看,那我們要完成softDelete,我們還有一個步驟要做,我們到app\Models\Article.php,加上一個涵式庫:

use Illuminate\Database\Eloquent\SoftDeletes;

這樣就完成了今天的目標show、delete。

今天我們就先到這裡吧,跟著我們在各個檔案中不斷穿梭的大家不知道有沒有暈頭轉向呢?希望今天的程式碼對大家都不是太複雜,大家看完就洗洗睡吧,我們明天見!掰掰!


上一篇
[Day 16] Laravel實作 -- 更新生死簿看看有沒有其他遺漏者
下一篇
[Day 18] Laravel實作 -- 地獄風景是夢境還是真實
系列文
Laravel實作 —30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言