Laravel 5系列教程二:路由,視圖,控制器工做流程

免費視頻教程地址https://laravist.com/series/laravel-5-basic

上一篇教程咱們走了那麼長的路,終於把Laravel安裝好了,這一篇教程咱們就要進入Laravel的神奇世界了,主要是講解Laravel的Router,Views,Controllers的工做流程,目的也就是讓你們明白Laravel在處理一個get請求的時候是如何工做的。php

在開始以前,咱們首先得將咱們的服務器啓動起來,若是你使用Laravel的artisan,你能夠直接:css

php artisan serve 

而後訪問localhost:8000,就能夠看到Laravel了html

我這裏仍是使用Homestead:nginx

homestead up 

homestead 啓動以後,咱們就能夠愉快開始寫代碼了。laravel

Laravel 文件目錄

而後訪問咱們上一節設置好的域名:blog.dev,也能夠看到咱們的Laravel。若是你在安裝或者使用Homestead的時候遇到任何問題,均可以直接問我。sql

替代文字

首先,對於一個新手來接觸Laravel的時候,可能你會對Laravel的文件目錄感受到很困惑,由於實在是太多東西了,到底什麼是Console,Events,Providers...一大堆東西在這裏。數據庫

可是不用擔憂,咱們後續的教程會陸續講解相關的內容。瀏覽器

目前咱們關心的是Http/這個文件夾,你能夠就簡單地記憶爲這個文件夾就是用來出來http請求的,好比咱們在訪問blog.dev的時候,Laravel是怎麼將那個可愛的頁面響應給咱們的?這個就能夠在app/Http/routes.php這個文件裏面找到,就像上圖顯示的同樣:服務器

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

這是什麼意思呢?其實這裏你能夠這樣理解:咱們註冊這樣一個路由,當用戶發送一個get請求(簡單理解就是在瀏覽器地址欄中訪問)的時候,什麼樣的get請求呢?也就是什麼樣的瀏覽地址呢?恩,就是網站的根目錄,也就是當一個用戶訪問咱們站點的根目錄的時候,咱們應該給用戶什麼樣的響應呢?這裏咱們就直接執行一個函數function () {},這個函數裏面就負責加載一個視圖return view('welcome');,這個試圖文件位於resources/views/welcome.blade.php,這裏的試圖文件後綴名blade.php可能會比較疑惑,由於Laravel使用的是blade的模板引擎,若是你接觸過其餘的模板引擎如Twig,Smarty等,對模板引擎的理解可能會清晰一點。可是若是你在這裏仍是不太明白,沒有關係,我後續會有專門的課程介紹blade模板。如今須要記住的是:Laravel的模板文件就是blade.php結尾的。app

你能夠直接打開resources/views/welcome.blade.php這個文件來看,裏面其實就是一些HTML代碼,easy enough。

因此上面的路由註冊其實就是負責解決訪問blog.dev的時候的響應。那麼咱們來嘗試一個Hello World簡單的返回:

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

回到瀏覽器,再次訪問blog.dev,咱們就會看到上面寫的Hello World。

替代文字

參數

試着傳入參數,咱們從新註冊一個路由:

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

上面第二個就是咱們本身從新註冊的路由,在路由中得變量用大括號{}包裹起來,而後在處理函數中接收這個參數,訪問http://blog.dev/user/guys,能夠看到下面的返回結果。

上面這個時候,咱們若是訪問http://blog.dev/user,這是報錯的,由於這個路由指望你在後面輸入一個變量$name,可是你並無,因此會報錯,咱們能夠經過可選參數來實現這個目的

可選參數:

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

這個時候,再次訪問http://blog.dev/user就不會報錯了,可是貌似這個時候只返回了Hello,咱們也能夠設置一個默認值:

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

這個時候,若是咱們沒有輸入$name這個變量,咱們會返回 Hello JellyBool

替代文字

使用控制器

上面註冊的這些路由是直接使用了匿名函數來返回字符串或加載視圖給咱們,可是咱們的控制器(controller)去哪裏了呢?咱們怎麼使用控制器呢(controllers)?首先咱們須要明白,在註冊路由是使用控制器在Laravel中大概是這樣寫的:

Route::get('/','ArticleController@index'); 

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

在命令行中執行:

php artisan make:controller ArticleController 

上一篇文章說過artisan這個工具很強大,他能夠用來生成咱們在開發當中須要的不少東西,給咱們的開發帶來了不少的便利,若是你花點時間慢慢適應一下,我敢確定,你之後會愛上Laravel的,會愛上artisan的。這裏只是使用了artisanmake:controller命令,其實artisan能夠乾的事情不少,咱們在這個教程中會一一接觸到,若是你火燒眉毛,能夠直接看官方文檔:

http://laravel.com/docs/5.1/artisan

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

替代文字

在這個文件裏面,Laravel幫咱們生成了一堆的方法:index()show()create()...等,而後咱們剛剛在Router(routes.php文件)中註冊的路由須要使用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代碼:

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>Article lists page</title> </head> <body> <h1>這是文章列表頁面</h1> </body> </html> 

而後訪問blog.dev/,咱們就能夠看到上面的模板內容了:

替代文字

到這裏,不知道你對Laravel的RouterViewsControllers這三個的工做流程有沒有一個清晰的認識,一般咱們須要實現某個功能(或者說新建立一個頁面)都是這樣的:

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

對應得實際操做大概是這樣的:

1. Route::get('/','ArticleController@index'); 2. php artisan make:controller ArticleController 3. public function index() { return view('articles.lists'); } 

下一節

關於Laravel的Router,Views,Controllers的工做流程就大概講到這裏,若是你有任何疑問,能夠隨時在評論裏面問我。而後下一節的內容會講如下的內容:

  1. 數據庫的配置和Laravel的Migration用法
  2. 將變量傳給視圖文件
  3. blade模板的基本用法
相關文章
相關標籤/搜索