Laravel?

本經驗介紹Laravel的Router,Views,Controllers的工作流程,目的也就是讓大家明白Laravel在處理一個get請求的時候是如何工作的。

Laravel 路由,視圖,控制器工作流程介紹

Laravel 路由,視圖,控制器工作流程介紹

工具/原料

Homestead

laravel

路由

路由

新手會對Laravel的文件目錄感覺到很困惑,到底什麼是Console,Events,Providers...一大堆東西在這裡。

我們關心的是Http/這個文件夾,你可以就簡單地記憶為這個文件夾就是用來出來http請求的,比如我們在訪問laravel的時候,Laravel就可以在app/Http/routes.php這個文件裡面找到,如圖所示:

Route::get('/', function () { return view('welcome');});

我們註冊這樣一個路由,當一個用戶訪問我們站點的根目錄的時候,我們就直接執行一個函數function () {},這個函數裡面就負責加載一個視圖return view('welcome');,這個試圖文件位於resources/views/welcome.blade.php, 這裡的視圖文件後綴名blade.php可,因為Laravel使用的是blade的模板引擎,需 要記住的是:Laravel的模板文件就是blade.php結尾的。

你可以直接打開resources/views/welcome.blade.php這個文件來看,裡面其實就是一些HTML代碼。

上面的路由註冊其實就是負責解決訪問laravel.app的時候的響應。

我們來嘗試一個Hello Laravel簡單的返回:

Route::get('/', function () { echo 'Hello Laravel';});

回到瀏覽器,再次訪問laravel.app,我們就會看到上面寫的Hello Laravel。

Laravel 路由,視圖,控制器工作流程介紹

Laravel 路由,視圖,控制器工作流程介紹

Laravel 路由,視圖,控制器工作流程介紹

參數

試著傳入參數,我們重新註冊一個路由:

Route::get('user/{name}', function ($name) { return 'Hello '.$name;});

上面就是我們自己重新註冊的路由,在路由中得變量用大括號{}包裹起來,然後在處理函數中接收這個參數,訪問http://laravel.app/user/shapolang,可以看到下面的返回結果。

上面這個時候,我們如果訪問這是報錯的,因為這個路由期望你在後面輸入一個變量$name,但是你並沒有,所以會報錯,我們可以通過可選參數來實現這個目的

Laravel 路由,視圖,控制器工作流程介紹

Laravel 路由,視圖,控制器工作流程介紹

可選參數:

Route::get('user/{name?}', function ($name = 'shapolang') { return 'Hello '.$name;});

將代碼修改之後,再次訪問就不會報錯了,這個時候我們沒有填寫name參數,會使用默認值,我們會返回 Hello shapolang

Laravel 路由,視圖,控制器工作流程介紹

控制器

Laravel中註冊路由時使用控制器在如下:

Route::get('/','[email protected]');

我們將routes.php中原來的註冊路由全部刪掉,只保留上面這一行代碼:這行代碼的意思是,當用戶請求我們的網站跟目錄的時候,我需要找到ArticleController並執行它的index方法,接下來,我們就需要創建我們的ArticleController了:

在命令行中執行:

php artisan make:controller ArticleController

這裡只是使用了artisan得make:controller命令,其實artisan可以乾的事情很多;

上面的命令給我們在app/Http/Controllers/目錄下生成了ArticleController.php,我們打開它來看看:

在這個文件裡面,Laravel幫我們生成了一堆的方法:index(),show(),create()...等,然後我們剛剛在Router(routes.php文件)中註冊的路由需要使用ArticleController的index方法

Laravel 路由,視圖,控制器工作流程介紹

Laravel 路由,視圖,控制器工作流程介紹

創建視圖文件

使用ArticleController的index方法,我們就在index()方法裡面加載一個視圖:

public function index() { return view('articles.lists'); }

這個視圖文件應該是位於resources/views/articles/lists.blade.php,但是在views文件夾當中,我們並沒有articles/這個文件夾和lists.blade.php,所以我們需要手動創建之。

這裡需要注意的是,Laravel的view()方法會默認從views文件夾查找視圖文件,所以你不用在view()方法中加入resources/views這個路徑,而且你也不用將blade.php寫上,Laravel會自動處理這些事情,至於views()方法articles.lists中得.就使用了路徑別名,你也可以使用/來寫成這樣articles/lists

創建好之後,在articles/lists.blade.php寫入簡單地HTML代碼

然後訪問laravel.app/,我們就可以看到上面的模板內容了:

Laravel 路由,視圖,控制器工作流程介紹

Laravel 路由,視圖,控制器工作流程介紹

總結

Laravel的Router,Views,Controllers這三個的工作流程

通常我們需要實現某個功能(或者說新創建一個頁面)都是這樣的:

1. 在routes.php中註冊路由 ---> 2. 創建對於的控制器 ---> 3. 在控制器中得對於方法加載視圖

對應得實際操作如圖:

Laravel 路由,視圖,控制器工作流程介紹

注意事項

對於不明白的地方要學會看框架源碼

相關問題答案