舒適提示:php
l 本文純乾貨,文字和代碼居多,且適合零基礎Laravel學習者;laravel
l 本文會新建一個名爲 blog 的 Laravel 程序,這是一個很是簡單的博客。sql
l 歡迎隨時關注ThinkSNS+的研發動態。數據庫
本文主要內容:瀏覽器
· 新建 Laravel 程序,如何鏈接數據庫;服務器
· Laravel 程序的基本文件結構;架構
· MVC(模型,視圖,控制器)和 REST 架構的基本原理;app
· 如何快速生成 Laravel 程序骨架;composer
學習Laravel前提:你必須是會PHP語言的程序技術人員,不然,應先學習PHP語言,再學習laravel框架,最後,才能上手社交系統ThinkSNS+的二次開發,如下是可能使用到的資源:框架
· PHP 5.4 及以上版本
· 包管理工具 Composer。Composer指南官網:https://getcomposer.org/, 中文網:http://www.phpcomposer.com/
· SQLite3 數據庫
· PHP 語言官方網站: http://php.net/
文中的示例代碼使用 $ 表示命令行提示符,你的提示符可能修改過,因此會不同。在 Windows 中,提示符多是 c:\source_code>。
打開命令行,跟着如下步驟執行下文中全部以 $ 開頭的代碼命令。
l 先確認是否安裝了 PHP 5.4 或者以上的版本:
若是你還沒安裝 PHP,請訪問 http://php.net/ ,先安裝PHP。
l 而後,確認是否在 PATH 中:
$ sqlite3 --version
l 安裝 Laravel , 經過 Laravel 安裝器
首先, 使用 Composer 全局下載並安裝 Laravel/installer:
$ composer global require "laravel/installer=~1.1"
安裝而且配置成功後, 可使用命令 laravel new 在您指定的目錄下建立一份全新安裝的 Laravel 應用, 如這樣的調用: laravel new blog 將會在當前目錄下建立一個叫 blog 的目錄。
Laravel 框架使用 composer 來執行安裝及管理依賴。若是尚未安裝它的話,請先從安裝 Composer 開始吧。
安裝Composer以後,您能夠經過終端執行下列命令來安裝 Laravel:
$ composer create-project laravel/laravel your-project-name --prefer-dist
這個命令會下載並安裝一份全新的 Laravel 存放在指定的 your-project-name 的目錄中。
Artisan 是 Laravel 內建的命令行工具,它提供了一些有用的命令協助您開發,它是由強大的 Symfony Console 組件所驅動。
l 打開終端,進入有寫權限的文件夾,生成一個新程序:
$ laravel new blog
或者
$ composer create-project laravel/laravel blog --prefer-dist
這個命令會在文件夾 blog 中新建一個 Laravel 程序。
執行 laravel new -h 能夠查看新程序生成器的全部命令行選項。
l 生成 blog 程序後,進入該文件夾:
$ cd blog
blog 文件夾中有不少自動生成的文件和文件夾,組成一個 Laravel 程序。
首先,咱們來添加一些文字,在頁面中顯示。爲了能訪問網頁,要啓動程序服務器。
$ php artisan serve
上述命令會啓動 PHP 內建的開發服務器,要查看程序,請打開一個瀏覽器窗口,訪問http://localhost:8000 。應該會看到默認的 Laravel 信息頁面:
要想中止服務器,請在命令行中按 Ctrl+C 鍵。服務器成功中止後回從新看到命令行提示符。在大多數類 Unix 系統中,包括 Mac OS X,命令行提示符是 $ 符號。
要在 Laravel 中顯示「Hello, Laravel!」,須要新建一個控制器和視圖。
l 建立控制器
控制器可用控制器生成器建立,你要告訴生成器,我想要個名爲「welcome」的控制器,以下所示:
$ php artisan controller:make WelcomeController --only=index
運行上述命令後,Laravel 會生成 app/controllers/WelcomeController.php 文件。生成文件後修改其中的 index 方法:
l 建立視圖:
在 app/views/ 目錄新建文件夾 welcome 並建立文件 index.blade.php ;
在 index.blade.php 文件中添加 <h1>Hello, Laravel!</h1> ;
咱們已經建立了控制器和視圖,如今要告訴 Laravel 在哪一個地址上顯示「Hello, Laravel!」。這裏,咱們但願訪問根地址 http://localhost:8000 時顯示。可是如今顯示的仍是歡迎頁面。
咱們要告訴 Laravel 真正的首頁是什麼。
在編輯器中打開 app/routes.php 文件。
咱們找到 :
Route::get('/', function()
{
return View::make('hello');
});
修改成:
Route::get('/', 'WelcomeController@index');
告知 Laravel,訪問程序的根路徑時,交給 welcome 控制器中的 index 動做處理。
前文已經介紹如何建立控制器、動做和視圖,下面咱們來建立一些更實質的功能。
在此以前咱們須要修改一些配置:
· app/config/app.php 文件中的 debug 選項設置爲 true (注:開啓開發模式,更友好的開發提示);
· app/config/database.php 文件中的 default 選項設置爲 sqlite (注:咱們以前選擇 sqlite 做爲默認數據庫);
在博客程序中,咱們要建立一些對象資源,好比文章,人和動物,能夠被建立、讀取、更新和刪除,這些操做簡稱 CRUD。
Laravel 提供了資源控制器能夠簡單的創建跟資源相關的 RESTful 控制器。
建立文章資源後,app/routes.php 文件的內容新增以下:
Route::resource('articles', 'ArticlesController');
執行 $ php artisan routes 任務,會看到定義了全部標準的 REST 動做。輸出結果中各列的意義稍後會說明。
下一節,咱們會加入新建文章和查看文章的功能。這兩個操做分別對應於 CRUD 的 C 和 R,即建立和讀取。
首先,程序中要有個頁面用來新建文章。一個比較好的選擇是 /articles/create。這個路由前面已經定義了,能夠訪問。打開 http://localhost:8000/articles/create ,會看到以下的路由錯誤:
產生這個錯誤的緣由是,沒有定義用來處理該請求的控制器。解決這個問題的方法很簡單:建立名爲 ArticlesController 的控制器。執行下面的命令便可:
$ php artisan controller:make ArticlesController
打開剛生成的 app/controllers/ArticlesController.php 文件,控制器就是一個類,繼承自 BaseController。在這個 ArticlesController 類中定義了對應的資源動做。動做的做用是處理文章的 CRUD 操做。
修改 ArticlesController.php 文件中的
public function create()
{
//
}
爲
public function create()
{
return View::make('articles.create');
}
在 PHP 中,方法分爲 public、private 和 protected 三種,只有 public 方法才能做爲控制器的動做。
如今刷新 http://localhost:8000/articles/create ,會看到一個新錯誤:
產生這個錯誤的緣由是,Laravel 但願這樣的常規動做有對應的視圖,用來顯示內容。沒有視圖可用,Laravel 就報錯了。
新建文件 app/views/articles/create.blade.php,寫入以下代碼:
<h1>New Article</h1>
再次刷新 http://localhost:8000/articles/create , 能夠看到頁面中顯示了一個標頭。如今路由、控制器、動做和視圖都能正常運行了。接下來要編寫新建文章的表單了。
要在模板中編寫表單,可使用「表單構造器」。Laravel 中經常使用的表單構造器是 Form。在 app/views/articles/create.blade.php 文件中加入如下代碼:
如今刷新頁面,會看到上述代碼生成的表單。在 Laravel 中編寫表單就是這麼簡單!
在 Form 方法的塊中,Form::text 建立了兩個標籤和兩個文本字段,一個用於文章標題,一個用於文章內容。最後,Form::submit 建立一個提交按鈕。
修改 app/views/articles/create.blade.php 文件中的 Form::open,改爲這樣:
{{ Form::open(array('url' => 'articles')) }}
這裏,咱們把 url 參數的值設爲 articles 。對應的地址是 /articels,默認狀況下,這個表單會向這個路由發起 POST 請求。這個路由對應於 ArticlesController 控制器的 store 動做。
表單寫好了,路由也定義了,如今能夠填寫表單,而後點擊提交按鈕新建文章了。
提交表單,會看到一個白屏。如今暫且無論這個錯誤。store 動做的做用是把新文章保存到數據庫中。
提交表單後,其中的字段以參數的形式傳遞給 Laravel。這些參數能夠在控制器的動做中使用,完成指定的操做。要想查看這些參數的內容,能夠把 store 動做改爲:
public function store()
{
dd(Input::all());
}
dd 函數爲 Laravel 內置的打印輸出函數,Input::all() 取得全部發出請求時傳入的輸入數據。
若是如今再次提交表單,不會再看到白屏錯誤,而是會看到相似下面的文字:
store 動做把表單提交的參數顯示出來了。不過這麼作沒什麼用,看到了參數又怎樣,什麼都沒發生。
在 Laravel 中,模型的名字使用單數,對應的數據表名使用複數。
建立 app/models/Article.php 並寫入如下代碼:
<?php
class Article extends Eloquent {
}
注意咱們並無告訴 Eloquent Article 模型會使用哪一個數據庫表。若沒有特別指定,系統會默認自動對應名稱爲「類名稱的小寫複數形態」的數據庫表。因此,在上面的例子中, Eloquent 會假設 Article 將把數據存在 articles 數據庫表。
使用 Artisan CLI 的 migrate:make 命令創建遷移文件:
$ php artisan migrate:make create_articles_table --create=articles
遷移文件會創建在 app/database/migrations 目錄下,文件名會包含時間戳,用於在執行遷移時用來決定順序。
app/database/migrations/20140903084339createarticlestable.php (你的遷移文件名可能有點不同)文件的內容以下所示:
修改其中的建立代碼爲:
在這個遷移中定義了一個名爲 up 的方法,在運行遷移時執行。up 方法中定義的操做都是能夠經過 down 方法實現可逆的,Laravel 知道如何撤銷此次遷移操做。運行遷移後,會建立 articles 表,以及一個字符串字段和文本字段。同時還會建立兩個時間戳字段,用來跟蹤記錄的建立時間和更新時間。
而後,使用 Artisan 命令運行遷移:
$ php artisan migrate
Laravel 會執行遷移操做,告訴你建立了 articles 表。
Migration table created successfully. Migrated: 20140903084339createarticlestable
再回到 ArticlesController 控制器,咱們要修改 store 動做,使用 Article 模型把數據保存到數據庫中。打開 app/controllers/ArticlesController.php 文件,把 store 動做修改爲這樣:
同時在 app/models/Article.php 添加 :
protected $fillable = array('title', 'text');
fillable 屬性容許在動做中調用模型的 create 方法使用 title 和 text 屬性。
再次訪問 http://localhost:8000/articles/create ,填寫表單,還差一步就能建立文章了。
和前面同樣,咱們要在 app/controllers/ArticlesController.php 文件中更改 show 動做,以及相應的視圖文件。
而後,新建 app/views/articles/show.blade.php 文件,寫入下面的代碼:
作了以上修改後,就能真正的新建文章了。訪問 http://localhost:8000/articles/create ,本身試試。
咱們還要列出全部文章,對應的路由是:
GET|HEAD articles | articles.index | ArticlesController@index
在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 index 動做:
而後編寫這個動做的視圖,保存爲 app/views/articles/index.blade.php:
如今訪問 http://localhost:8000/articles ,會看到已經發布的文章列表。
至此,咱們能夠新建、顯示、列出文章了。下面咱們添加一些連接,指向這些頁面。
打開 app/views/welcome/index.blade.php 文件,添加:
{{ link_to_route('articles.index', 'My Blog') }}
linktoroute 是 Laravel 內置的視圖幫助方法之一,根據提供的文本和地址建立超連接。這上面這段代碼中,地址是文章列表頁面。
接下來添加到其餘頁面的連接。先在 app/views/articles/index.blade.php 中添加「New Article」連接,放在 <table> 標籤以前:
{{ link_to_route('articles.create', 'New article') }}
點擊這個連接後,會轉向新建文章的表單頁面。
而後在 app/views/articles/create.blade.php 中添加一個連接,位於表單下面,返回到 index 動做:
{{ link_to_route('articles.index', 'Back') }}
最後,在 app/views/articles/show.blade.php 模板中添加一個連接,返回 index 動做,這樣用戶查看某篇文章後就能夠返回文章列表頁面了:
{{ link_to_route('articles.index', 'Back') }}
在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 store 動做:
而後修改 app/views/articles/create.blade.php 添加 :
再次訪問 http://localhost:8000/articles/create ,嘗試發佈一篇沒有標題的文章,會看到一個頗有用的錯誤提示。
咱們已經說明了 CRUD 中的 CR 兩種操做。下面進入 U 部分,更新文章。
首先,要在 ArticlesController 中更改 edit 動做:
視圖中要添加一個相似新建文章的表單。新建 app/views/articles/edit.blade.php 文件,寫入下面的代碼:
這裏的表單指向 update 動做
method: put ( patch ) 選項告訴 Laravel,提交這個表單時使用 PUT 方法發送請求。根據 REST 架構,更新資源時要使用 HTTP PUT 方法。
而後,要在 app/controllers/ArticlesController.php 中更新 update 動做:
最後,咱們想在文章列表頁面,在每篇文章後面都加上一個連接,指向 edit 動做。打開 app/views/articles/index.blade.php 文件,在「Show」連接後面添加「Edit」連接:
咱們還要在 app/views/articles/show.blade.php 模板的底部加上「Edit」連接:
{{ link_to_route('articles.index', 'Back') }} |{{ link_to_route('articles.edit', 'Edit', $article->id) }}
下面使用局部視圖去掉兩個視圖中的重複代碼。
新建 app/views/notifications.blade.php 文件,寫入如下代碼:
下面來修改 app/views/articles/creat.blade.php 和 edit.blade.php 視圖,使用新建的局部視圖,把其中的上面代碼全刪掉,替換成:
@include('notifications')
如今介紹 CRUD 中的 D,從數據庫中刪除文章。按照 REST 架構的約定,刪除文章的路由是:
DELETE articles/{articles} | articles.destroy | ArticlesController@destroy
刪除資源時使用 DELETE 請求。若是還使用 GET 請求,能夠構建以下所示的惡意地址:
<a href='http://example.com/articles/1/destroy'>look at this cat!</a>
刪除資源使用 DELETE 方法,路由會把請求發往 app/controllers/ArticlesController.php 中的 destroy 動做。修改 destroy 動做:
想把記錄從數據庫刪除,能夠在模型對象上調用 destroy 方法。最後,在 index 動做的模板(app/views/articles/index.blade.php)中加上「Destroy」連接:
恭喜,如今你能夠新建、顯示、列出、更新、刪除文章了,完成了Laravel的第一次實踐,祝您早日適應ThinkSNS+的技術框架,更多內容,請訪問www.thinksns.com