經過昨天的介紹相信大家對於route都有更多的了解,今天也打起精神來了解Controller吧!Controller作為laravel的內政大臣,所有請求資料的動作都無法繞過他,他掌管著四個重要的功能:CRUD,分別為create(新增)、read(閱讀)、update(修改)、delete(刪除)。
那我們先來建我們所需要的controller吧。
首先我們到cmd進到建專案的資料夾,之後輸入指令 php artisan make:model Article -mrc
,成功後你應該可以在app\Http\Controllers中找到新的controller並且擁有一連串的新function,這七個涵式便是我們用來完成crud的方法,若是我們稍微將他分類:
<?php
namespace App\Http\Controllers;
use App\Models\Prefer;
use Illuminate\Http\Request;
class ArticleController 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(Article $article)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Article $article)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Article $article)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Article $article)
{
//
}
}
我們現在建完article的controller了,之後我們還需要一個joiner的controller來實作報名的部分,大家試著自己建建看吧。看完之後是不是有人覺得,明明我只是要建controller為甚麼是用make:model
而且後面還需要-mrc,那是甚麼?
第一個 m 代表著migration,我們在建controller時我們可以請他順便將我們之後所需要的migration建起來,至於他是做甚麼的明天我們會介紹。
第二個 r 代表的是resourece,他為我們建立了上面七個涵式,也為我們處理好route對應的麻煩。
resource有各相對應的方式:
Verb | URI | Action | Route |
---|---|---|---|
GET | /data | index | data.index |
GET | /data/create | create | data.create |
POST | /data | store | data.store |
GET | /data/{id} | show | data.show |
GET | /data/{id}/edit | edit | data.edit |
PUT/PATCH | /data/{id} | update | data.update |
DELETE | /data/{id} | destroy | data.destroy |
當然你也可以選擇不使用這個功能,那麼你就會得到一個乾淨的controller,但相對的當你需要用到這些功能時你就必須跟著他預訂的方式自己建立涵式。
這時我們可以到 routes\web.php
,去定義我們之後要用到的resource。
Route::resource('articles',\App\Http\Controllers\ArticleController::class);
Route::resource('joiners',\App\Http\Controllers\JoinerController::class)
->except('index')
->middleware(['auth', 'verified']);
'articles',\App\Http\Controllers\ArticleController::class
,為甚麼我們需要這個?
這是因為在laravel中若是要用到controller就必須寫出完整的路徑,每次都打這麼長的路徑實在是太麻煩了,所以我們在這定義,若是之後我用到"articles"這個名稱的路徑,就到這個定義後的controller中去找尋需要的涵式。
->except('index')
,這行是什麼?
上面resourece為我們定義好七條路徑,但是若不會用到著麼多你可以用except()將他所鎖起來,告訴route除了這些事項其餘的我都要用到。他有個相反詞only(),則是告訴route我只需要用到這些事項其他的幫我鎖起來,這樣你就不會多出太多你不會用到的路徑。
->middleware(['auth', 'verified'])
相信經過昨天大家對於這行都非常熟悉了。
第三個 c 代表的就是我們所需要的controller。
跟著model建的好處是它會自動將你的名字對應關係處理好,當然這邊也可以選擇自己建,但是要注意Article的controller他預定是ArticleController,若是打錯字他會找不到controller,在書寫時要注意。
今天的概念相對簡單,但是也是很重要的部分喔!今天之後就不屬於麻瓜的領域了,請各位魔法師握好自己的魔杖,跟顫抖的我們繼續向前行吧。