iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Modern Web

Laravel實作 —系列 第 14

[Day 14] Laravel實作 -- 餵地獄三頭犬資料不知道會不會吐出來

  • 分享至 

  • xImage
  •  

昨天介紹完laravel的資料守門人,我們今天終於要來存放我們從前端拿到的資料了。

首先我們先到app\Http\Controllers\ArticleController.php,我們要告訴laravel我們哪些資料一定要填,因為我們在建表的時候我們都沒有設定可空,若是使用者有個欄位忘記填再存放資料時就會出錯,所以我們先做設定。

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $content = $request->validate([
            'title' => 'required',
            'content' => 'required|min:50',
            'summary' => 'required|min:10',
            'start_time' => 'required',
            'end_time' => 'required'
        ]);

        auth() -> user() -> articles() -> create($content);
    }

我們先標註哪些資料是required,接著我們還能夠對資料去做更多的要求,例如最少幾個字、最多幾個字、只能填數字等等,那我們就在required後加上 | 然後增加我們想要的限制就可以了。
接著我們利用auth() -> user() -> articles() -> create($content);,從作者的角度進到user中,在到article中去create這筆資料,這麼做的話我們可以很容易地取得user_id並且將資料存入。

那告訴完laravel後,我要怎麼告訴使用者他沒有填到這筆資料呢?其實這個在我們ˊ之前寫blade時就已經寫了,我們到create的blade中去看看resources\views\articles\create.blade.php

@if($errors->any())
	<div class = "error p-3 bg-red-600 text-white font-thin rounded">
		<ul>
			@foreach($errors -> all() as $error)
				<li>{{ $error }}</li>
			@endforeach
		</ul>
	</div>

@endif

https://ithelp.ithome.com.tw/upload/images/20230929/20163142CawLTgC7gf.png

這是說如果出現任何錯誤的話,幫我把每一筆都顯示出來,這樣使用者就會很清楚地知道他哪些地方填錯了。但是當我們每一次看到錯誤訊息我們之前所填的資訊都會不見,那這樣如果我打了一篇曠世巨作,但是忘記填標題結果文章就消失了怎麼辦?
為了預防這種憾事發生,我們要在我們填的表格中放入訊息,提示他應該顯示以前的文字{{ old('') }}。我們的想法是讓大家能夠先有一個完整的畫面顯示,之後再去知道後面的原理,於是我們之前在寫blade時我們也已經放進去了。那下面就是我們在create article中有用到的old訊息,這樣你就不用擔心你的絕世文章會因為沒有寫到標題消失了。

<input type = "text" value="{{ old('title') }}" name = "title" class = "w-2/5 border-gray-300 p-2 mx-2">

<textarea name = "content" rows = "20" class = "w-4/5 m-auto border-gray-300 p-2 " >{{ old('content') }}</textarea>

<textarea name = "summary" rows = "5" class = "w-4/5 m-auto border-gray-300 p-2" >{{ old('summary') }}</textarea>

<input type = "date" value="{{ old('start_time') }}" name = "start_time" class = "border-gray-300 p-2 mx-2">

<input type = "date" value="{{ old('end_time') }}" name = "end_time" class = "border-gray-300 p-2 mx-2">

最後我們回到app\Http\Controllers\ArticleController.php將下面的程式放store function中的最後一行,這樣我們在儲存完資料後我們就能夠回到原本的首頁了。

return redirect() -> route('dashboard');

那我們今天就先到這裡了!我們在這邊祝大家中秋節快樂,今天真正要打的程式碼比較少,看完就去多看看月亮吃吃月餅。我們明天要開始介紹blade中用到的css了,希望大家鼓起勇氣不要太害怕前端,和我們互相扶持的走向前方,明天見!掰掰!


上一篇
[Day 13] Laravel實作 -- 牛頭馬面帶我參觀地獄的防火牆
下一篇
[Day 15] Laravel實作 -- 地獄業火焚燒的是我對前端的美好願景
系列文
Laravel實作 —30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言