遇見 Laravel 的午後(Part 10)
很感謝很多公司給我機會,雖然很多公司願意給我offer,但有時候就是一個緣分,畢竟多方面會去衡量,畢竟有錢的壓力。
未來我還是會不斷的學習,學習是為了成就更多的事物,但如果不先學好、不先理解,怎麼去成就這些事物?先學如何使用輪子,再去學習怎麼造一個輪子,加以改進輪子等。
控制(Controller)
控制 Controller 的存在,就為了處理各項請求,達到各MVC分層的結構。
建立Controller
在建立Controller的時候,有人一定會問說,難道我不行複製改檔名就好嗎?其實也是可以的,但是我個人建議使用Artisan的指令去產生檔案,畢竟影響的東西就是名稱及Namespace(詳細內容請觀看PSR-4: Autoloader)。
1 | $ php artisan make:controller MemberController |
建立好以後,開啟 MemberController.php
,以下為產生的檔案內容。
專案 > app > Http > Controllers > MemberController.php
1 |
|
可以來牛刀小試,搭配Route 做一個關聯。專案 > app > Http > Controllers > MemberController.php
將 MemberController.php
寫兩個簡單的 function,分別是index、new 這兩個,而 new 這個 function 我們做一個簡單的傳值,以下只是隨便寫的,請各位別介意。
1 |
|
之後我們設定兩個Route去跟Controller做請求或要求。第二個Route,我們要設定一個參數做一個接值及傳值,讓MemberController
可以接到URL所丟的值。專案 > routes > web.php
1 | // GET URL給的路徑要求交給 MemberController 的 index 方法處理。 |
用 artisan 指令執行專案
1 | $ php artisan serve |
分別輸入以下兩個網址,當Route找Controller以後,Controller會吐值回頁面上。
- http://127.0.0.1:8000/member/50
網址後方有個/50
,在URL GET傳值到Controller的時候會將所得到的值傳回頁面。
使用artisan提供的指令去看專案內有哪些Route存在。
1 | $ php artisan route:list |
1 | +--------+----------+---------------+------+---------------------------------------------+------------+ |
建立Resource Controller
為什麼要說是建立 Resource Controller?因為 resource 提供了CURD
的方法或者說是提供了Action,所以 Resource Controller 可以方便開發者更快速的將CURD
做好做滿。但在專案中,可能會有不會使用到的Action,其實可以把不需要的拿掉。
- 使用
--resource
這個參數,就是方便建立CURD的Action。 - Controller 要跟Model進行溝通,所以我們後面會帶上model的指令
--model=Model名稱
1
$ php artisan make:controller MemberController --resource --model=Member
開啟MemberDataController.php
,因為在建立Resource Controller以後,就會帶出7個Action(或稱方法function),接下來我們就可以針對我們的需求,在這7個做需求的邏輯處理。
專案 > app > Http > Controllers > MemberDataController.php
1 |
|
將兩部分做個修改測試
1、index 回傳數值
1 | public function index() |
2、show 回傳文字,並接收傳值
1 | public function show($id) |
Route對應的Action,我們可以透過 resource 將所有請求及需求指定給MemberDataController,可以統一為我們處理CURD的Action。專案 > routes > web.php
1 | Route::resource('/memberData', 'MemberDataController'); |
用 artisan 指令執行專案
1 | $ php artisan serve |
以下兩個網址,當Route找Controller以後….
- http://127.0.0.1:8000/memberData/
這個對上index這個方法
- http://127.0.0.1:8000/memberData/123
這個就會對上show的方法
查看路由(Route)列表,就可以很清楚看到 resource 處理7種不同的要求。
1 | $ php artisan route:list |
1 | +--------+-----------+-------------------------------+--------------------+---------------------------------------------------+------------+ |
工程師在開發的時候,可能7個方法(Action)不一定都用的到,Laravel 本身就提供了 only 和 except 可以做篩選及排除。專案 > routes > web.php
Partial Resource Routes
1 | // 只用到 index、show |
建立單一方法的Controller
單一方法也可以說是單一的Action,官方稱為Single Action Controllers
,開發階段可能很單純只用到單一的方法,其他都不需要,所以Laravel提供另一個參數 --invokable
。
1 | $ php artisan make:controller CarController --invokable |
開啟 CarController.php
,建立完成裡面就只有 __invoke
方法。
專案 > app > Http > Controllers > CarController.php
1 |
|
將上方的方法修改成下面的程式,做一個小測試。
1 | public function __invoke($id) |
因為只有單一方法,所以在設定Route的時候也不用指定轉到哪一些方法去。專案 > routes > web.php
1 | Route::get('car/{id}', 'CarController'); |
__invoke
在 PHP 5.3.0 的時候就現世,他並非laravel 所提供,只是laravel 他將__invoke
做整合而已,當你在使用Class類別的時候,如果__invoke
存在,就會被執行。
__invoke
的資訊,請參考:Magic Methods
完整指令
1 | $ php artisan make:controller {ControllerName} --{option 1} -- {option 2} |
建立空的Controller
1 | $ php artisan make:controller {Controller Name} |
建立帶有CURD 7個function的Controller,並帶入model
1 | $ php artisan make:controller {Controller Name} --resource --model=Member |
建立單一方法的Controller
1 | $ php artisan make:controller {ControllerName} --invokable |
提供API給別人使用的Controller
1 | $ php artisan make:controller {ControllerName} --api |
專案 > routes > web.php
1 | Route::apiResource('/URL', 'ControllerName'); |
結論
其實 Controller 做的事情,其實很單純的CURD,雖然還有一些比較深入的部分,但這個部分以後會再提到,但如果就單純以一個官方網站,其實這樣很足夠。
標籤: w3HexSchool
PHP
Laravel
原文作者: Sian
原文鏈接: https://dew31794.github.io/2020/07/05/遇見 Laravel 的午後(Part 10)/
版權聲明: 轉載請註明出處(必須保留作者署名及鏈接)