iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
Modern Web

Laravel 8: For Beginners系列 第 11

留言板(Part1)

前言

雖然已經是上個時代的眼淚,但留言板仍然是一個良好的動態網頁練習主題。

Spec

  • 一個視圖
    • 顯示所有留言,需要分頁(Pagination)
    • 新增留言,留言具有標題及內文
  • 留言時需可以選擇性附加圖檔
    • 大小限制 5MB 以下
  • 其它
    • 資料庫使用 PostgreSQL

前置作業

安裝 Laravel

$ laravel new message-board

設定 PostgreSQL

建立 PostgreSQL 環境

可以利用 Docker 簡單建立 PostgreSQL 的環境

$ docker run --name database \
		-p 5432:5432 \
		-e POSTGRES_DB=message_board
	  -e POSTGRES_USER=laravel
		-e POSTGRES_PASSWORD=password \
		-d  postgres
  • --name 是為了識別 container,若未指定的話,Docker 會自動隨機設定一個名字
    • 不能有相同 name 的 container 同時存在,若有同名的 container 存在,記得要先使用 docker rm [container_name] 移除原本的 container
  • -p 表示綁定的連接埠,這邊使用 postgres 的預設 port
    • 不能使用已經佔用的 port,啟動失敗的話記得確定使用的 port 是否已被佔用
  • -e 設定環境變數,根據 Docker Hub 上 PostgreSQL 的說明設定
    • POSTGRES_DB:設定資料庫名稱(參閱 .env
    • POSTGRES_USER:設定資料庫的用戶
    • POSTGRES_PASSWORD:設定用戶密碼,因為是本地開發使用所以簡單一些也無所謂

設定 PostgreSQL 連線

修改 .env 修改連線資訊

# ...

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=message_board
DB_USERNAME=laravel
DB_PASSWORD=password

# ...

最後,執行 Migration 確認連線是否成功,並移除不需要的 migrations。

原型開發

使留言可被儲存於資料庫

利用 Laravel Make Model 功能,我們可以建立 Message Model 及其 Migration 與 Factory。

$ php artisan make:model -m -f Message
  • -f 表示一起建立 Testing Factory

Schema 設計

<?php

class CreateMessagesTable extends Migration
{
	public function up()
	{
		Schema::create('messages', function (Blueprint $table) {
			$table->id();
			$table->string('name');
			$table->string('title');
			$table->string('content');
			$table->string('attachment')->nullable();
			$table->timestamps();
		});
	}

	public function down()
	{
		Schema::dropIfExists('messages');
	}
}
  • name 用於儲存用戶名,預設由系統隨機生成
  • title 表示留言標題
  • content 表示留言內容
  • attachment 用於儲存附加圖檔儲存的路徑,若為 null 則表示沒有附加圖檔

Message Model 設計

<?php

// app/Models/Message.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
	use HasFactory;

	protected $fillable = ['name', 'title', 'content', 'attachment'];
}

並且設計 Message Factory

<?php

// database/factories/MessageFactory.php

// ...

class MessageFactory extends Factory
{
	public function definition()
	{
		return [
			'name' => Str::random(8),
			'title' => $this->faker->sentence,
			'content' => implode("\n", $this->faker->sentences),
			'attachment' => null,
		];
	}
}

之後,便可以使用 Tinker Shell 去測試是否資料庫存取正常運作

(tinker) > Message::factory()->create()

上一篇
短網址服務(Part3)
下一篇
留言板(Part2)
系列文
Laravel 8: For Beginners14

尚未有邦友留言

立即登入留言