來到第九天,快完成三分之一的進度囉!(天哪還有好久)
其實文章多寫真的是滿有益處的,這樣寫下來,幫助我在看官方文件時能夠更快摘要出重點,也發現很多之前忽略掉的小細節。
今天我們來講 Laravel Controller,它做的事情就是用來處理由 Route 路由導過來的網頁請求,以及這個請求所要做的事情。Controllers 能夠將相關邏輯/類別的請求組合在同一個 class 裡面。
你可以透過 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 (中介層),是在請求由 Route 進到 Controller 時的動作,通常都會用在驗證,通過後再讓 Controller 動作。
Middleware 可以在 Route 加入,也可以放在 Controller funciton 內的 __construct()
裡面。
Route
Route::get('profile', [UserController::class, 'show'])->middleware('auth');
Controlleronly
代表只有 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 時一同講解吧,明天見囉!