Laravel被稱爲「全棧」式框架,由於它可以處理從網絡服務到數據庫管理、HTML生成的一切事情,垂直集成的web開發環境給開發者提供了更好的體驗。php
開發人員能夠經過命令行工具,生成和管理Laravel項目環境。Laravel附帶了一個名爲Artisan
的優秀的命令行工具,它提供了一些開發過程當中有用的命令用,能夠用來生成框架代碼和數據庫管理。它是基於強大的Symfony Console 組件開發的。css
Laravel的目標是給開發者創造一個愉快的開發過程,而且不犧牲應用的功能性。快樂的開發者才能創造最棒的代碼!爲了這個目的,咱們博取衆框架之長處集中到Laravel中,這些框架甚至是基於Ruby on Rails、ASP.NET MVC、和Sinatra等開發語言或工具的。laravel
Laravel是易於理解而且強大的,它提供了強大的工具用以開發大型、健壯的應用。傑出的IoC、數據庫遷移工具和緊密集成的單元測試支持,這些工具賦予你構建任何應用的能力。web
這是全部laravel項目具備基本上相同的目錄結構,其中的每一個文件都具備指定的地方。經過對目錄結構的約定,確保你是按照「laravel方式」來工做。數據庫
正如你看到的,laravel項目下面有4個文件夾:app
、bootstrap
、public
、vendor
,這4個文件夾下面又有不少個子文件夾,當你第一次看到這麼豐富的文件夾內容時,是否是以爲頗有壓力?不要緊,咱們會逐一的來了解不一樣的文件夾。bootstrap
app
包含了站點的controllers(控制器),models(模型),views(視圖)和assets(資源)。這些是網站運行的主要代碼,你會將你大部分的時間花在這個目錄裏。bootstrap
用來存放系統啓動時須要的文件,這些文件會被如index.php這樣的文件調用。public
這個文件夾是惟一外界能夠看到的web服務器的目錄。它含有laravel框架核心的引導文件index.php,這個目錄也可用來存聽任何能夠公開的靜態資源,如css,Javascript,images等vender
正如上面提到的,全部laravel中有趣的事情都會產生在app目錄,讓咱們多瞭解一些裏面的內容。
咱們經過上面的表格能夠看到,只要花一些心思在創建和命名的文件上,就能獲得一個具備良好文件系統的結構化的應用。設計模式
讓咱們更深一步瞭解如何創建laravel應用。你可能已經注意到,app目錄下面有三子目錄:models,views,controllers。這是代表了laravel是model-view-controller(MVC)架構模式,它將「業務邏輯」與圖形用戶界面相關的輸入和顯示邏輯(GUI)分離。在laravel Web應用中,業務邏輯一般由數據模型(如用戶,博客文章)組成,GUI則只是一個瀏覽器中的頁面。MVC設計模式在Web的開發領域中很是受歡迎。瀏覽器
MVC模式的三個要素:服務器
一個典型的laravel應用程序由上面提到的MVC組成網絡
當訪問一個laravel應用程序時,瀏覽器發送一個請求,由Web服務器接收並傳遞到laravel的路由引擎。該laravel路由器接收到請求後,根據配置重定向到相應的控制器類的方法。
而後由控制器類接管。在某些狀況下,控制器將當即渲染一個視圖,這是一個模板,將被轉換成HTML而且發送回瀏覽器。更廣泛的動態網站,控制器與模型進行交互,與數據庫進行通訊。調用模型後,控制器呈現最終視圖(HTML、CSS和圖像)並返回完整的web頁面到用戶的瀏覽器。
Laravel提倡模型、視圖和控制器,應保持徹底獨立的存儲單獨的文件在不一樣的目錄。這就是laravel的目錄結構發揮做用的地方。
像MVC這樣的設計模式的產生,就是爲了讓開發者的工做更加輕鬆。這就是Laravel比那些不用任何模式的PHP厲害的地方。若是這種討論你如今感受很抽象,不用擔憂!當你開始用Laravel工做,你都不會意識到你是在一種設計模式中工做。過一段時間後,就會變得天然了。
數據模型是任何應用程序的基礎,它創建了應用程序的業務邏輯。每一塊數據經過使用一個數據庫表表示。laravel提供了一些技術來簡化對數據庫的訪問。
Laravel經過將數據庫中的錶行轉成能被輕鬆操縱的PHP對象,來鏈接應用程序的數據模型和數據庫表。它還使您可以執行業務規則,描述在應用程序中不一樣的數據模型之間的關係等。例如,一我的的家庭關係能夠用Laravel Eloquent OR / M描述以下:
class Person extends Eloquent { public function mother() { return $this->belongsTo('Mother'); } public function father() { return $this->belongsTo('Father'); } public function spouse() { return $this->hasOne('Spouse'); } public function sisters() { return $this->hasMany('Sister'); } public function brothers() { return $this->hasMany('Brother'); } }