簡書 http://www.jianshu.com/php
看雲 http://www.kancloud.cn/css
碼雲 https://git.oschina.net/laravel
github https://github.com/git
SF社區 segmentfaultgithub
爆棧(overflowstack) https://stackoverflow.com/ http://overflowstack.github.io/web
laravel是世界排名第一的PHP語言的web全棧框架。從06開始發佈。是一個單入口的MVC框架。ajax
Laravel優點:segmentfault
世界排名第一 ThinkPHP是中國排名第一api
源碼是託管在github上面的,由全世界衆多的開源工做者爲Laravel提供各類插件和資源。數組
語法簡潔,清晰,能夠達到沒學過的人,也能夠大概看到它的意思。
中文: https://d.laravel-china.org/docs/5.5/installation
Laravel的最新版本是5.5.0,2017-09-06發佈。
只提供 6 個月的 Bug 修復支持,一年的安全修復支持,通常不適合用來進行公司項目的開發,不過也有很多公司直接使用這個通常發行版。這種版本適合學習使用,方便咱們對laravel最新的技術進行跟蹤。
兩年的 Bug 修復,三年的安全更新支持,適合用來進行公司的項目開發。
咱們這裏學習5.4版本。
安裝以前有幾步工做:
pdo
openssl
Mbstring
有三種方式:
在工做中,每每咱們都是本地機子開發項目,開發完成之後,上傳到服務器,因此咱們在服務器從新搭建的Laravel項目都是要採用第一種作法。
安裝過程當中,若是出現如下錯誤,則表示沒有開啓openssl擴展。
安裝完成效果:
可是,上面的安裝,其實有個細節沒有處理好,就是用戶訪問咱們的網站要除了輸入域名之外, 還有加上一個二級目錄public。因此,咱們要解決這個問題,須要把域名指向到public目錄下
再次,訪問域名:
composer 是 PHP項目的包管理器(插件、項目等源碼包)
下載composer 的官網:
英文官網:
中文官網:
Windows下面下載composer
安裝時,要注意 這個軟件須要聯網,會都國外的服務器中下載部分文件,因此有可能安裝會失敗!若是失敗,有三種解決方案:1. 多試幾回;2. 使用代理上網;3: 使用離線安裝。
安裝成功:
使用composer 來安裝 插件和項目了。
在安裝以前,還要學習composer相關的配置和命令。
配置中國鏡像有兩種方式:
1. 單個項目配置[ 這種配置方式,只會在這個項目中,使用到中國全量鏡像下載安裝包 ]
2. 系統全局配置[ 這種配置方法,會在當前系統安裝配置完成之後,全部的項目的下載安裝包都會從鏡像服務器下載。 ]
接下來,全部的composer 能夠下載的安裝包都會列在 安裝包列表網站中,
這個網站中,咱們能夠直接搜素咱們的安裝包( 項目、框架、插件 )
composer create-project --prefer-dist laravel/laravel php25 5.4.*
--prefer-dist 主要是由於默認狀況下 compose 會以源碼的方式下安裝因此速度較慢,所以,使用這個選項可讓composer 以 安裝包的形式下載。
命令行效果:
安裝成功:
如何運行項目?
php artisan serve --host=域名 --port=端口
命令行效果:
接下來,咱們就能夠經過瀏覽器訪問localhost:8000端口了,效果以下:
注意,這裏上面的php是php.exe,咱們以前安裝composer時提到的要設置php.exe到環境變量中,因此對於不清楚本身系統中的php.exe在哪裏的話,能夠直接使用如下命令查看:
php --ini
若是出現如下錯誤:
則表示當前php.exe沒有設置到環境變量中。去設置便可。
咱們通常若是是MVC框架,先把項目結構先了解,瞭解了目錄結構之後,看工具,例如工匠指令,看完工匠指令,就須要MVC( 模型-控制器-視圖) 的建立和使用。
接下來,咱們已經安裝好了Laravel項目了,那麼咱們接下里,學習Laravel的目錄結構。
.env 項目的本地開發時的配置文件
app/Http/Controllers 控制器目錄
默認狀況下,Laravel是沒有幫咱們建立模型目錄的,須要咱們本身去建立,因此外界部分公司,模型目錄通常是 app/Http/Models 或者 app/Models 。
config/ 這裏的全部配置項,都是項目上線前進行配置的。
public/ 這個公共入口目錄,項目上線之後,用戶都是隻能訪問到public目錄下,因此這個目錄通常都是用來放 img,js,css的。
resources/views/ 視圖目錄
vendor/ 是composer 用來保存項目中的安裝包的。之後咱們開發Laravel的項目,全部使用composer安裝的插件都會自動保存在這個目錄中,因此這個千萬不能動!
routes/ 是laravel一個很是重要的目錄,叫路由。咱們用戶可以在地址欄上輸入對應的網站能訪問都對應的控制器,全靠這個routes發揮做用,接下來立刻學到的。
storage/ 存儲設備,之後咱們項目中臨時文件,session文件或咱們之後上傳的文件均可以保存到這個目錄中。
server.php 開發時,在命令行下運行Laravel框架的文件。這個文件其實就是引入了public/index.php入口文件。
artisan 這個就是laravel提供的命令行工具,叫工匠指令,這個工匠指令,本質上來講,就是PHP文件,只是沒有後綴而已。artisan 就保存在項目的根目錄。
artisan是Laravel提供的命令行工具,有時候也被人叫「腳手架」、「代碼生成器」。
主要的目的是爲了減輕咱們的工做量,幫咱們完成一些簡答而常常重複的工做。
1. 啓動項目
php artisan serve
--port 設置測試服務器的監聽端口
2. 建立控制器
php artisan make:controller Admin\AdminController
--resource 建立資源控制器
3. 建立模型
php artisan make:model Admin
4. 查看路由列表
php artisan route:list
5. 清除項目緩存文件
php artisan cache:clear
6. 清除視圖編譯文件
php artisan view:clear
咱們之後作項目的時候,通常都須要建立大量的控制器,其中,有部分控制器甚至還會目錄或模塊進行存儲,例如,咱們後臺的管理員就有可能須要咱們本身建立之後放在對應後臺目錄中,這樣的話,咱們就可使用如下的命令:
php artisan make:controller 目錄\控制器名稱
咱們能夠藉助 artisan 工匠指令,建立兩種不一樣的控制器,分別是通常控制器和資源控制器。
通常控制器:
資源控制器(通常只會出如今網站後臺模塊,用於增刪查改,用於提供給移動端,其餘語言做爲數據接口使用。):
咱們安裝完成了Laravel項目之後,咱們看到的歡迎界面,哪裏來的?
在resource/views/welcome.blade.php頁面來的。
那麼,上面知道了歡迎界面的位置,那麼它怎麼顯示的?是否是控制器加載?
很明顯,控制器會加載視圖,依靠咱們在ThinkPHP中學到的經驗,可能就在控制器裏面加載的。
咱們經過在編輯器中查找「welcome」,最終卻發現,當前welcome視圖倒是routes/web.php文件中的一段代碼加載進來的。
接下來,咱們學習下Laravel的路由。
咱們回憶下,當初咱們作ThinkPHP的時候,用戶爲何在瀏覽器中若是了一段地址,例如,
localhost/index.php/Home/Goods/detail,ThinkPHP就能夠自動幫咱們完成了控制器執行和視圖界面的顯示工做?
其實,是由於當初的THinkPHP內部也有路由,內部的路由幫咱們接收了用戶發過來的uri請求,並把uri請求轉發給了地址中聲明的控制器,由控制器接收了用戶的請求信息,並返回了數據。
url = 域名 + uri地址
uri 就是url除了 域名之外的剩下一部分信息。
圖示:
ThinkPHP中已經幫咱們完成了路由的指向工做。
轉發用戶的uri請求到對應的應用程序中執行,這個過程就叫作路由。
對於路由而言,本質就是把uri地址和對應的應用程序進行一一對應的關聯。
其實,用戶在地址欄上輸入的uri參數,也叫作路由參數。
Laravel並無幫完成咱們路由的指向工做,因此咱們學習Laravel就必須先懂得怎麼寫路由的指向。
Laravel提供了一個路由操做類Route專門給咱們用來聲明路由的。
Route 提供了不少靜態方法給咱們使用。咱們上面看到的 Route::get()就是其中最經常使用的方法。
Route根據http請求類型一共提供多個操做路由的方法.
Route提供給咱們用於客戶端的http 的get類型的請求。
參數1:URI地址,用戶輸入地址上的uri請求
參數2:若是是函數,則是匿名函數,若是是字符串則必須是對應書寫規則的控制器的方法。
例如,咱們第二個參數是匿名函數(回調函數),以下:
這種路由,通常用於給第三方提供數據接口時使用的,也由於這種路由的第二個參數是匿名函數,因此這種被稱爲「匿名函數路由」。
例如,咱們第二個參數是字符串,以下:
第二個參數的書寫:
Route::post( $uri, ‘命令空間\控制器類名@方法名’ );
這種路由是咱們開發中最多見的路由,由於第二個參數是控制器,因此也稱爲「控制器路由」。
注意:
Routes目錄下,通常有兩個文件,api.php裏面專門寫提供給其餘平臺或移動端數據接口的路由地址,web.php裏面大部分寫的都是提供給web端的路由地址。
專門用來接收由客戶端發送過來的Http post請求,通常用來添加數據
咱們這裏可使用一個get路由地址,輸出表單,表單來發送post請求,由post路由接收。
在Laravel中要發送post、put或patch或delete時要注意,必須在表單中附帶一個csrf令牌字段,若是沒有令牌字段,則Laravel會拒絕咱們的http請求。
Laravel提供了一個輔助函數 csrf_field() 能夠幫咱們自動生成對應的csrf令牌字段。
同時,Laravel還提供了另外一個函數 csrf_token(),只會生成一個值,用於在ajax提交時。
效果:
跨站請求僞造是一種經過假裝受權用戶的請求來利用授信網站的惡意漏洞。
通常攻擊手段,都是惡意攻擊者,實現準備好了一個頁面(連接),把連接發送已經網站的用戶,在用戶不知情的狀況下,讓點擊這個惡意的頁面(連接),頁面(連接)由於在當前用戶的瀏覽器中發送到服務器的,因此服務器默認狀況下,已經默認用戶已經登陸,因此對於這種惡意的連接,並不會採起驗證手段,最後攻擊者就實現攻擊服務器。這種攻擊手法叫「跨站請求僞造」。
圖示:
Laravel中的csrf令牌就是爲了防止項目遭受這種攻擊而設置的防範機制,這種機制就是在頁面中生成一個針對當前用戶的惟一的令牌,只有這個用戶的所屬令牌字段,才能操做網站。
專門用來接收由客戶端發送過來的Http delete請求,通常用來刪除數據
咱們要使用delete路由,必須先知道如何發送一個delete請求呢?
上面的錯誤,表示咱們當前訪問頁面的方式,不容許訪問當前地址對應的路由。
咱們開發時,HTML的表單默認是沒有delete、put、patch這幾個發送請求的類型的,那咱們若是想要在表單中發送以上三種類型的請求,可使用 僞造表單請求來完成。
手冊->HTTP層->路由:
效果:
專門用來接收由客戶端發送過來的Http put請求,通常用來修改數據
有時候,咱們會選擇在一個控制器的方法中,顯示錶單的頁面也是提交數據的頁面。
Route除了提供上面幾個處理單一HTTP請求的方法之外,還提供了另外幾個方法。
這種路由容許咱們指定當前路由地址可以接收哪些HTTP請求, 因此這種也叫匹配路由。
Route::match( $arr, $uri , $callback);
參數1:數組,用於設置當前路由地址容許經過哪些HTTP請求方式訪問!
參數2:字符串,uri地址
參數3:匿名函數或控制器字符串
代碼:
效果:
用於設置當前路由,容許使用任何的HTTP請求方式來訪問。因此這種路由也叫「任意路由」。
Route::any($uri, $callback);
參數1:字符串,uri地址
參數2:匿名函數或控制器字符串
代碼:
這種叫作路由羣組,專門用來劃分不一樣模塊路由的,經過劃分,能夠達到簡寫路由的效果。
Route::group($arr, $callback);
參數1:數組,用來指定劃分的條件
參數2:匿名函數
路由羣組的劃分條件:
中間件( middleware )
命名空間( namespace )
子域名( domain )
路由前綴( prefix )
例如,咱們作項目通常都是前臺和後臺,咱們就可使用路由羣組,進行劃分了。
代碼:
控制器的存儲目錄: app/Http/Controllers目錄中。
咱們使用前面建立的一個控制器Admin\UserController,使用它來完成咱們對控制器內容的學習。
return view(‘目錄/模板名稱’);
return view(‘目錄.模板名稱’);
例如,咱們當前控制器Admin\UserController@index方法,加載視圖。
通常建議分目錄存儲視圖模板文件,一個模塊一個目錄,模塊下面控制器所屬的視圖也分子目錄存儲。
Laravel在控制器中加載視圖,代碼:
咱們使用了view函數,加載視圖,那麼就須要在對應的視圖目錄中建立視圖文件。
有兩種視圖文件,
一種就是直接模板文件名後面加上「.php」後綴,這種模板叫作「普通模板」,這種不支持使用Laravel內置的模板引擎blade。
另外一種,就是模板文件名後面加上「.blade.php」後面,這種模板叫作「blade模板」,對於這種模板Laravel會默認使用 blade模板引擎對裏面的內容進行解析。
路由:
控制器代碼:
視圖:
咱們能夠經過view函數的第二參數進行賦值,也能夠經過with方法進行賦值到模板中。
控制器:
視圖:
控制器:
視圖:
接下來,咱們看下blade模板引擎的語法。
blade是Laravel內置的一套很是使用的,優秀的模板引擎。
控制器:
視圖:
控制器:
視圖:
效果:
Laravel支持原生語法,因此對於PHP的全部代碼都直接支持,包括註釋。
<?php // ?>
{{-- 中間就是Laravel的註釋 --}}