昨天提到了 MVC,今天要來聊聊其中的
Controller
是什麼勒?
我們來看看官方網站怎麼介紹 Controller:
Instead of defining all of your request handling logic as closures in your route files, you may wish to organize this behavior using "controller" classes. Controllers can group related request handling logic into a single class. For example, a
UserController
class might handle all incoming requests related to users, including showing, creating, updating, and deleting users. By default, controllers are stored in theapp/Http/Controllers
directory.
我的理解大概是這樣,在寫程式碼覺得很困惑就來問問官網找找解答!
-- 初學者:什麼是 Controller ?
-- Laravel官網:Controller 用來整理請求邏輯,將相關邏輯放在一個類別裡。例如,UserController
處理所有與使用者有關的請求。
-- 初學者:會有什麼樣的請求呢?
-- Laravel官網:可以顯示(showing)、創建(creating)、更新(updating)和刪除(deleting)使用者等等。
-- 初學者:聽起來很方便!那 Controller 會放哪裡?
-- Laravel官網:Controller 會放在 app/Http/Controllers
這個資料夾裡,這樣管理起來更方便。
使用 Artisan 命令 中的 make:controller
指令創建 Controller ,剛剛上面有聊到 Controller 會存放在 app/Http/Controllers
php artisan make:controller UserController
創建之後的檔案結構
<?php
namespace App\Http\Controllers; // 定義了這個控制器的命名空間,讓組織代碼和避免命名衝突。
use Illuminate\Http\Request; // 印用了 Request 類,讓我們可以在控制器中使用它們
class UserController extends Controller
{
// 輸入要使用的方法
// 這裡新增一個"show"方法
public function show(string $id): View
{
return view('user.profile', [
'user' => User::findOrFail($id)
]);
}
}
我們可以定義一個路由到 UserController
的 show
方法
use App\Http\Controllers\UserController;
Route::get('/user/{id}', [UserController::class, 'show']);
當我們的 Controller 很複雜,可以使用 __invoke
方法來簡化結構,不需要指定方法名能直接操作 Controller 。
使用 Artisan 命令 中的 make:controller
指令並增加 --invokable
命令創建 Controller ,讓檔案內生成 invokable
方法
php artisan make:controller ProvisionServer --invokable
創建之後出現的檔案結構
namespace App\Http\Controllers;
class ProvisionServer extends Controller
{
/**
* Provision a new web server.
*/
public function __invoke() // 生成 invokable 方法
{
// ...
}
}
我們可以定義一個路由到 ProvisionServer
,這裡我們可以發現,因為我們使用 __invoke
,所以路由不用指定方法
use App\Http\Controllers\ProvisionServer;
Route::post('/server', ProvisionServer::class);
使用 Artisan 命令 中的 make:controller
指令並增加 --resource
命令創建 Controller ,在檔案內生成 CRUD 操作的方法
php artisan make:controller PostController --resource
創建之後出現的檔案結構,包含每個可用資源操作的方法:create、store、show、edit、update、destroy
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}
我們可以定義一個路由到 resourceController
,在這裡看到,因為使用 --resource
,遵循了 RESTful API 的設計原則,將會自動生成一組常用的 RESTful 路由
use App\Http\Controllers\resourceController;
Route::resource('resource', resourceController::class);
這裡來說說的目前對資源操作的方法的理解:這些方法形成了 RESTful 風格的 Controller ,有助於清楚處理 CRUD(創建、讀取、更新和刪除)
index
:顯示所有的資料create
:新增資料store
:將新增的資料儲存資料庫show
:顯示指定的資料edit
:顯示編輯資料的表單update
:將編輯後的資料更新至資料庫destroy
:刪除指定的資料參考資料:
踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!
聖杯八:今天第15天了,走完一半惹~再繼續勇敢地踏上未知之旅的主題!
“If you walk the footsteps of a stranger, you'll learn things you never knew you never knew. “
如果你願意踏上陌生的足跡,你將會發現那些你從未察覺的美好與智慧。
— Pocahontas, Pocahontas