iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
1
自我挑戰組

Laravel 實戰經驗分享系列 第 9

Laravel 實戰經驗分享 - Day9 初探 Laravel - Controller 控制器

來到第九天,快完成三分之一的進度囉!(天哪還有好久)
其實文章多寫真的是滿有益處的,這樣寫下來,幫助我在看官方文件時能夠更快摘要出重點,也發現很多之前忽略掉的小細節。
今天我們來講 Laravel Controller,它做的事情就是用來處理由 Route 路由導過來的網頁請求,以及這個請求所要做的事情。Controllers 能夠將相關邏輯/類別的請求組合在同一個 class 裡面。

基本的 Controller 用法

你可以透過 Artisan 來新增 Controller,它的路徑在 app/Http/Controllers 裡面。

--resource 會自動幫你加入基本的函數進行 CRUD (查詢、新增、修改、刪除) 的操作。
--model 則是可以幫你將這個 Controller 引入需要操作的 Model。

php artisan make:controller UserController --resource --model=User

下面是官網給的一個 Controller 範例,裡面有引用到 Model 的用法,之後找時間來講,$id 是從路由送過來的參數,function show 的功能是查詢 user 的 profile。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\User;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return View
     */
    public function show($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

接下來就可以回到 routes/web.php 內新增以下的路由,{id} 則是這個路由送給 Controller 的參數,對照上面 function 的 $id。

Laravel 8

Route::get('user/{id}', [UserController::class, 'show']);

Laravel 8 以前

Route::get('user/{id}', 'UserController@show');

加上 Middleware

Middleware (中介層),是在請求由 Route 進到 Controller 時的動作,通常都會用在驗證,通過後再讓 Controller 動作。

Middleware 可以在 Route 加入,也可以放在 Controller funciton 內的 __construct() 裡面。

Route

Route::get('profile', [UserController::class, 'show'])->middleware('auth');

Controller
only 代表只有 index 這個 function 會經過 log 這個 Middleware。
except 則是除了 store 以外的 function 都會經過 subscribed 這個 Middleware。

class UserController extends Controller
{
    /**
     * Instantiate a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('log')->only('index');
        $this->middleware('subscribed')->except('store');
    }
}

之後還有 API Resource Routes 的用法,我們留待之後講解 RESTful API 時一同講解吧,明天見囉!


上一篇
Laravel 實戰經驗分享 - Day8 初探 Laravel - Route 路由設定
下一篇
Laravel 實戰經驗分享 - Day10 初探 Laravel - Model 模型以及 Eloquent ORM (上)
系列文
Laravel 實戰經驗分享30

尚未有邦友留言

立即登入留言