Laravel 專案設定初學者指南

本文將介紹Laravel的基本構建模塊,並指導如何使用Laravel建立一個小型項目。

Laravel是一個強大且優雅的PHP網頁應用框架,因其簡單性、多功能性及強大功能而深受開發者喜愛。多年來,Laravel已成為大小項目的首選PHP框架。

前置條件:開始使用Laravel

在深入Laravel開發之前,我們必須確保已安裝所有必要的工具和軟件。以下是我們所需的:

  • PHP。Laravel基於PHP運行,因此第一步是確保您的系統上已安裝PHP。如果不確定是否已安裝PHP,請在終端或命令提示符中輸入php -v。如果已安裝PHP,您將看到版本號。如果未安裝,則需要進行安裝。

    要在您的機器上安裝PHP,我們有幾個選項:

    本地安裝。您可以直接在您的電腦上安裝PHP。訪問PHP下載頁面以獲取適用於您操作系統的最新版本。

    Laravel Homestead。若要進行更簡化的設置,特別是如果您是PHP開發新手,建議使用Laravel Homestead。Homestead是一個預先打包的Vagrant盒子,為Laravel提供完整的開發環境。您可以在此處找到安裝說明

  • Composer。Laravel 使用 Composer 進行依賴管理。Composer是 PHP 的默認依賴管理器,廣泛使用且文檔齊全。

  • Laravel 安裝器。我們可以在系統上全局安裝 Laravel,使用Laravel 安裝器,這是一個方便的命令行工具,能夠簡化和優化創建新 Laravel 項目的過程。要在你的系統上全局安裝它,請按照以下步驟操作:

    1. 打開終端或命令提示符。
    2. 運行以下 Composer 命令:
    composer global require laravel/installer
    

    安裝完成後,確保 Composer 的全局 bin 目錄已添加到系統的“PATH”中,這樣你就可以在任何地方運行 laravel 命令了。

    如果你偏好 Homestead 之外更輕量級的替代方案,可以考慮 Laravel Herd。Herd 是一個基於 Docker 的本地開發環境,專門為 Laravel 項目量身定制。你可以在這裡了解更多關於 Herd 的信息以及如何設置它

通過配置包含PHP、Composer及Laravel Installer的開發環境(或探索如Homestead或Herd等選項),您將充分準備好開啟Laravel之旅。接下來的章節中,我們將逐步介紹如何創建新的Laravel項目、探索其目錄結構及配置開發環境。

創建新的Laravel項目

既然開發環境已就緒,現在是時候創建一個新的Laravel項目了。要創建一個“空白”項目,我們可以使用以下終端命令:

composer create-project --prefer-dist laravel/laravel project-name

應將project-name替換為實際的項目名稱。此命令將下載最新版本的Laravel並建立一個包含所有必要文件和依賴的新項目目錄。

目錄結構:探索Laravel項目

在創建新的Laravel項目後,我們會面對一個組織良好的目錄結構。理解此結構對於高效的Laravel開發至關重要。以下是一些關鍵目錄及其用途的概述:

  • 應用程式。此目錄存放我們應用程式的核心邏輯,包括控制器、模型及服務提供者。
  • 啟動。Laravel的啟動與設定檔案位於此處。
  • 設定。各種應用程式元件的設定檔案可在此找到,讓我們能從專案的單一點查找並自訂設定,如資料庫連接與服務。
  • 資料庫。在此目錄中,我們將定義Laravel的Eloquent ORM將使用的資料庫遷移與種子。Eloquent簡化了資料庫管理。
  • 公開。公開可存取的資產,如CSS、JavaScript及圖片,屬於此處。此目錄亦包含應用程式的入口點,即index.php檔案。
  • 資源。應用程式的原始、未編譯資產,如Blade模板、Sass及JavaScript,儲存於此。
  • 路由。Laravel的路由配置在此目錄中管理。
  • 儲存。暫存及快取檔案,以及日誌,均儲存於此。
  • 供應商。Composer在此目錄管理專案的依賴。所有下載的庫將位於此目錄。

配置:資料庫設定與環境變數

要設定資料庫連線,我們需在專案根目錄中開啟.env檔案。在此,我們可以指定資料庫類型、主機、使用者名稱、密碼及資料庫名稱。多虧了Eloquent ORM,Laravel支援多種資料庫連接,使其能靈活應對各種專案需求。

理解.env檔案

.env檔案是用於定義特定環境的配置值,如資料庫連線細節、API金鑰及其他設定。來看一個.env檔案中的簡單範例:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=my_username
DB_PASSWORD=my_password

在此範例中:

  • DB_CONNECTION指定使用的資料庫驅動類型(如MySQL、PostgreSQL、SQLite)。
  • DB_HOST指定資料庫伺服器所在的主機。
  • DB_PORT指定資料庫伺服器運行的埠號。
  • DB_DATABASE指定欲連接的資料庫名稱。
  • DB_USERNAMEDB_PASSWORD指定存取資料庫所需的使用者名稱和密碼。

使用環境變數

確保敏感資訊如資料庫憑證的安全至關重要。Laravel鼓勵使用環境變數來達成此目的。我們不在.env檔案中硬編碼憑證,而是在配置檔案中引用它們。

舉例來說,在我們的 Laravel 配置文件中(位於 config/ 目錄),可以這樣引用資料庫配置:

'mysql' => [
    'driver' => env('DB_CONNECTION', 'mysql'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    // ...
],

這裡,env() 函數從 .env 文件中獲取指定環境變數的值。如果找不到該變數,它會回退到作為第二個參數提供的默認值。

通過使用配置文件,我們可以將敏感數據存儲在更安全的位置,並且能夠輕鬆地在不同環境(如開發和生產)之間切換配置。

隨著 Laravel 項目的創建、目錄的組織以及資料庫的配置完成,我們已準備好開始構建我們的 Web 應用程序。在接下來的章節中,我們將專注於路由、控制器以及使用 Blade 模板來創建前端視圖。

路由、控制器和視圖:Laravel 應用程序的核心

在 Laravel 中,路由、控制器和視圖共同協作來處理 HTTP 請求並渲染動態網頁。理解這些概念對於使用 Laravel 創建 Web 應用程序至關重要。

簡而言之,HTTP 請求由路由器接收,路由器隨後知道應該由哪個控制器來處理該操作。控制器負責處理信息並通過視圖展示處理後的信息。

路由

在 Laravel 中,我們可以在 routes/web.php 文件中定義路由。一個基本的路由定義如下:

Route::get('/welcome', function () {
    return view('welcome');
});

此範例設定了一條路由,當被訪問時,會返回welcome視圖。如前所述,路由亦可用於調用控制器操作,使我們能更有效地組織代碼。

建立控制器

控制器作為我們路由與應用邏輯之間的橋樑。要創建控制器,我們可以使用make:controller命令:

php artisan make:controller YourControllerName

我們的新控制器包含了對應應用中不同操作的方法,例如顯示頁面或處理表單數據。

視圖與Blade模板

Laravel中的視圖負責向用戶展示應用數據。默認情況下,Laravel使用名為Blade的模板引擎,它簡化了動態、可重用視圖的創建。以下是在控制器方法中渲染視圖的示例:

public function index()
{
    $data = ['name' => 'John'];
    return view('welcome', $data);
}

在此範例中,welcome視圖與數據一同渲染,這裡'name'被傳遞進去。

Blade是一個功能強大的模板引擎,允許通過條件語句、循環等方式創建動態內容。

數據庫遷移與填充

Laravel的資料庫遷移與種子系統讓我們能定義資料庫結構並填充初始數據。將遷移視為版本控制的資料庫變更,而種子則是添加樣本數據的過程。

遷移與種子是極具威力的概念,允許在不同環境間保持資料庫一致性。

要建立遷移,我們可使用make:migration指令:

php artisan make:migration create_table_name

接著編輯生成的遷移檔案以定義表結構,再利用Artisan執行遷移:

php artisan migrate

種子常用於填充表以供測試和開發。創建種子可使用make:seeder指令並運行:

php artisan db:seed

為資料庫互動建立模型

Laravel的Eloquent ORM透過允許我們以對象方式操作資料庫,簡化了資料庫互動。創建模型可使用make:model指令:

php artisan make:model YourModelName

在模型中定義表與關係,以實現輕鬆的數據檢索與操作。例如,從users表檢索所有記錄:

$users = YourModelName::all();

掌握這些知識,結合路由、控制器、視圖、資料庫遷移、種子與模型,我們正朝著使用Laravel構建動態網頁應用邁進。在接下來的章節中,我們將深入探討創建簡單的CRUD應用並探索更多Laravel高級特性。

在Laravel中創建簡單的CRUD應用

讓我們將Laravel之旅提升到下一個層次,透過建立一個CRUD應用程式——在此案例中,是一個簡單的書籍註冊應用程式,我們可以在其中創建、讀取、更新和刪除書籍。這個實作練習將幫助我們理解如何在Laravel中實現CRUD操作。

由於本文篇幅限制,我們將只專注於創建應用程式的初始頁面,因此完成此應用程式的任務就交給你了!

第一步:為書籍表格建立遷移

要為books表格生成遷移,請使用以下命令:

php artisan make:migration create_books_table

此命令生成一個用於在資料庫中創建books表格的遷移文件。接下來,編輯我們剛剛創建的遷移文件(database/migrations/YYYY_MM_DD_create_books_table.php)以定義表格結構:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateBooksTable extends Migration
{
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('author');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('books');
    }
}

在此遷移文件中,我們定義了books表格的結構,包括其欄位(idtitleauthortimestamps)。然後,我們要運行遷移以創建表格:

php artisan migrate

此命令執行遷移文件並在資料庫中創建books表格。

第二步:為書籍表格建立種子

接下來,我們要為books表格生成種子,以便用一些初始數據填充它:

php artisan make:seeder BooksTableSeeder

此命令生成一個用於用初始數據填充books表格的種子文件。

編輯種子文件(database/seeders/BooksTableSeeder.php)以定義樣本書籍數據:

use Illuminate\Database\Seeder;

class BooksTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('books')->insert([
            ['title' => 'Book 1', 'author' => 'Author A'],
            ['title' => 'Book 2', 'author' => 'Author B'],
            ['title' => 'Book 3', 'author' => 'Author C'],
        ]);
    }
}

在此種子文件中,我們定義了將被插入到books表中的樣本書籍數據。在此特定情況下,我們正在創建從1到3的書籍和從A到C的作者。

運行種子文件以填充books表:

php artisan db:seed --class=BooksTableSeeder

此命令執行種子文件並將定義的樣本數據填充到books表中。

步驟3:創建控制器

生成用於管理書籍的控制器:

php artisan make:controller BookController

此命令生成一個控制器文件(BookController.php),其中包含處理與書籍相關的CRUD操作的方法。控制器創建後,讓我們專注於在BookController中實現CRUD方法。它位於app/Http/Controllers/BookController.php

use App\Book; // 導入Book模型

public function index()
{
    $books = Book::all();
    return view('books.index', compact('books'));
}

public function create()
{
    return view('books.create');
}

public function store(Request $request)
{
    $book = new Book;
    $book->title = $request->input('title');
    $book->author = $request->input('author');
    $book->save();

    return redirect()->route('books.index');
}

// 類似地實現編輯、更新、顯示和刪除方法

在此控制器文件中,我們定義了處理與書籍相關的CRUD操作的方法。例如,index方法從數據庫中檢索所有書籍並將它們傳遞給index視圖,而store方法根據通過表單提交的數據創建新的書籍記錄。create()方法負責顯示創建新書籍記錄的表單。當用戶導航到與此方法關聯的路由時,Laravel將執行此函數並返回一個名為books.create的視圖。

步驟4:創建視圖

在 `resources/views` 資料夾中建立用於列出、創建和編輯書籍的視圖。

範例視圖(create.blade.php):

@extends('layout')

@section('content')
  <h1>Create a New Book</h1>
  <form method="POST" action="{{ route('books.store') }}">
    @csrf
    <div class="form-group">
      <label for="title">Title</label>
      <input type="text" name="title" class="form-control" id="title" placeholder="Enter book title">
    </div>
    <div class="form-group">
      <label for="author">Author</label>
      <input type="text" name="author" class="form-control" id="author" placeholder="Enter author name">
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
  </form>
  <a href="{{ route('books.index') }}">Back to the list</a>
@endsection

在此範例中,create 視圖包含一個用於新增書籍的表單。該表單將數據提交到 BookControllerstore 方法。@csrf 指令生成 CSRF 令牌,以防止跨站請求偽造攻擊。

透過此範例,您應該能夠自行實現控制器的其餘 CRUD 操作方法及視圖,開始動手吧!

結論

在本文中,我們探討了 Laravel 應用程式的基礎:如何使用命令行協助我們構建應用程式、Laravel 應用程式的結構,以及如何在 Laravel 中創建 CRUD 應用程式。

I hope this article was useful and that you’re now capable of using Laravel to create your applications and expand the information here with more advanced topics. More information on Laravel can be found at the official Laravel website.

Source:
https://www.sitepoint.com/laravel-project-setup-beginners-guide/