摘要:在中,提示符可能是。框架使用來(lái)執(zhí)行安裝及管理依賴。為了能訪問(wèn)網(wǎng)頁(yè),要啟動(dòng)程序服務(wù)器。在大多數(shù)類系統(tǒng)中,包括,命令行提示符是符號(hào)。這兩個(gè)操作分別對(duì)應(yīng)于的和,即創(chuàng)建和讀取。首個(gè)表單要在模板中編寫表單,可以使用表單構(gòu)造器。
【摘要】自從ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都說(shuō)技術(shù)門檻抬高了,其實(shí)你與TS+的距離僅僅只是學(xué)習(xí)一個(gè)新框架而已,所以,我們今天來(lái)說(shuō)說(shuō)Laravel的入門。
溫馨提示:
l 本文純干貨,文字和代碼居多,且適合零基礎(chǔ)Laravel學(xué)習(xí)者;
l 本文會(huì)新建一個(gè)名為 blog 的 Laravel 程序,這是一個(gè)非常簡(jiǎn)單的博客。
l 歡迎隨時(shí)關(guān)注ThinkSNS+的研發(fā)動(dòng)態(tài),有產(chǎn)品問(wèn)題、優(yōu)化建議、售前咨詢、售后咨詢、技術(shù)支持都可以咨詢QQ3298713109,手機(jī)18108035545(同微信)。
本文主要內(nèi)容:
· 新建 Laravel 程序,如何連接數(shù)據(jù)庫(kù);
· Laravel 程序的基本文件結(jié)構(gòu);
· MVC(模型,視圖,控制器)和 REST 架構(gòu)的基本原理;
· 如何快速生成 Laravel 程序骨架;
學(xué)習(xí)Laravel前提:你必須是會(huì)PHP語(yǔ)言的程序技術(shù)人員,否則,應(yīng)先學(xué)習(xí)PHP語(yǔ)言,再學(xué)習(xí)laravel框架,最后,才能上手社交系統(tǒng)ThinkSNS+的二次開發(fā),以下是可能使用到的資源:
· PHP 5.4 及以上版本
· 包管理工具 Composer。Composer指南官網(wǎng):https://getcomposer.org/, 中文網(wǎng):http://www.phpcomposer.com/
· SQLite3 數(shù)據(jù)庫(kù)
· PHP 語(yǔ)言官方網(wǎng)站: http://php.net/
一、新建 Laravel 程序
文中的示例代碼使用 $ 表示命令行提示符,你的提示符可能修改過(guò),所以會(huì)不一樣。在 Windows 中,提示符可能是 c:source_code>。
1、安裝 Laravel
打開命令行,跟著以下步驟執(zhí)行下文中所有以 $ 開頭的代碼命令。
l 先確認(rèn)是否安裝了 PHP 5.4 或者以上的版本:
如果你還沒(méi)安裝 PHP,請(qǐng)?jiān)L問(wèn) http://php.net/ ,先安裝PHP。
l 然后,確認(rèn)是否在 PATH 中:
$ sqlite3 --version
l 安裝 Laravel , 通過(guò) Laravel 安裝器
首先, 使用 Composer 全局下載并安裝 Laravel/installer:
$ composer global require "laravel/installer=~1.1"
安裝并且配置成功后, 可以使用命令 laravel new 在您指定的目錄下創(chuàng)建一份全新安裝的 Laravel 應(yīng)用, 如這樣的調(diào)用: laravel new blog 將會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)叫 blog 的目錄。
Laravel 框架使用 composer 來(lái)執(zhí)行安裝及管理依賴。如果還沒(méi)有安裝它的話,請(qǐng)先從安裝 Composer 開始吧。
安裝Composer之后,您可以通過(guò)終端執(zhí)行下列命令來(lái)安裝 Laravel:
$ composer create-project laravel/laravel your-project-name --prefer-dist
這個(gè)命令會(huì)下載并安裝一份全新的 Laravel 存放在指定的 your-project-name 的目錄中。
2、創(chuàng)建 Blog 程序
Artisan 是 Laravel 內(nèi)建的命令行工具,它提供了一些有用的命令協(xié)助您開發(fā),它是由強(qiáng)大的 Symfony Console 組件所驅(qū)動(dòng)。
l 打開終端,進(jìn)入有寫權(quán)限的文件夾,生成一個(gè)新程序:
$ laravel new blog
或者
$ composer create-project laravel/laravel blog --prefer-dist
這個(gè)命令會(huì)在文件夾 blog 中新建一個(gè) Laravel 程序。
執(zhí)行 laravel new -h 可以查看新程序生成器的所有命令行選項(xiàng)。
l 生成 blog 程序后,進(jìn)入該文件夾:
$ cd blog
blog 文件夾中有很多自動(dòng)生成的文件和文件夾,組成一個(gè) Laravel 程序。
二、Hello, Laravel!
首先,我們來(lái)添加一些文字,在頁(yè)面中顯示。為了能訪問(wèn)網(wǎng)頁(yè),要啟動(dòng)程序服務(wù)器。
$ php artisan serve
上述命令會(huì)啟動(dòng) PHP 內(nèi)建的開發(fā)服務(wù)器,要查看程序,請(qǐng)打開一個(gè)瀏覽器窗口,訪問(wèn)http://localhost:8000 。應(yīng)該會(huì)看到默認(rèn)的 Laravel 信息頁(yè)面:
要想停止服務(wù)器,請(qǐng)?jiān)诿钚兄邪?Ctrl+C 鍵。服務(wù)器成功停止后回重新看到命令行提示符。在大多數(shù)類 Unix 系統(tǒng)中,包括 Mac OS X,命令行提示符是 $ 符號(hào)。
1、顯示“Hello, Laravel!”
要在 Laravel 中顯示“Hello, Laravel!”,需要新建一個(gè)控制器和視圖。
l 創(chuàng)建控制器
控制器可用控制器生成器創(chuàng)建,你要告訴生成器,我想要個(gè)名為“welcome”的控制器,如下所示:
$ php artisan controller:make WelcomeController --only=index
運(yùn)行上述命令后,Laravel 會(huì)生成 app/controllers/WelcomeController.php 文件。生成文件后修改其中的 index 方法:
l 創(chuàng)建視圖:
在 app/views/ 目錄新建文件夾 welcome 并創(chuàng)建文件 index.blade.php ;
在 index.blade.php 文件中添加
2、設(shè)置程序的首頁(yè)
我們已經(jīng)創(chuàng)建了控制器和視圖,現(xiàn)在要告訴 Laravel 在哪個(gè)地址上顯示“Hello, Laravel!”。這里,我們希望訪問(wèn)根地址 http://localhost:8000 時(shí)顯示。但是現(xiàn)在顯示的還是歡迎頁(yè)面。
我們要告訴 Laravel 真正的首頁(yè)是什么。
在編輯器中打開 app/routes.php 文件。
我們找到 :
Route::get("/", function()
{
return View::make("hello");
});
修改為:
Route::get("/", "WelcomeController@index");
告知 Laravel,訪問(wèn)程序的根路徑時(shí),交給 welcome 控制器中的 index 動(dòng)作處理。
三、開始使用
前文已經(jīng)介紹如何創(chuàng)建控制器、動(dòng)作和視圖,下面我們來(lái)創(chuàng)建一些更實(shí)質(zhì)的功能。
在此之前我們需要修改一些配置:
· app/config/app.php 文件中的 debug 選項(xiàng)設(shè)置為 true (注:開啟開發(fā)模式,更友好的開發(fā)提示);
· app/config/database.php 文件中的 default 選項(xiàng)設(shè)置為 sqlite (注:我們之前選擇 sqlite 作為默認(rèn)數(shù)據(jù)庫(kù));
在博客程序中,我們要?jiǎng)?chuàng)建一些對(duì)象資源,比如文章,人和動(dòng)物,可以被創(chuàng)建、讀取、更新和刪除,這些操作簡(jiǎn)稱 CRUD。
Laravel 提供了資源控制器可以簡(jiǎn)單的建立跟資源相關(guān)的 RESTful 控制器。
創(chuàng)建文章資源后,app/routes.php 文件的內(nèi)容新增如下:
Route::resource("articles", "ArticlesController");
執(zhí)行 $ php artisan routes 任務(wù),會(huì)看到定義了所有標(biāo)準(zhǔn)的 REST 動(dòng)作。輸出結(jié)果中各列的意義稍后會(huì)說(shuō)明。
下一節(jié),我們會(huì)加入新建文章和查看文章的功能。這兩個(gè)操作分別對(duì)應(yīng)于 CRUD 的 C 和 R,即創(chuàng)建和讀取。
1、挖地基
首先,程序中要有個(gè)頁(yè)面用來(lái)新建文章。一個(gè)比較好的選擇是 /articles/create。這個(gè)路由前面已經(jīng)定義了,可以訪問(wèn)。打開 http://localhost:8000/article... ,會(huì)看到如下的路由錯(cuò)誤:
產(chǎn)生這個(gè)錯(cuò)誤的原因是,沒(méi)有定義用來(lái)處理該請(qǐng)求的控制器。解決這個(gè)問(wèn)題的方法很簡(jiǎn)單:創(chuàng)建名為 ArticlesController 的控制器。執(zhí)行下面的命令即可:
$ php artisan controller:make ArticlesController
打開剛生成的 app/controllers/ArticlesController.php 文件,控制器就是一個(gè)類,繼承自 BaseController。在這個(gè) ArticlesController 類中定義了對(duì)應(yīng)的資源動(dòng)作。動(dòng)作的作用是處理文章的 CRUD 操作。
修改 ArticlesController.php 文件中的
public function create() { // }
為
public function create() { return View::make("articles.create"); }
在 PHP 中,方法分為 public、private 和 protected 三種,只有 public 方法才能作為控制器的動(dòng)作。
現(xiàn)在刷新 http://localhost:8000/article... ,會(huì)看到一個(gè)新錯(cuò)誤:
產(chǎn)生這個(gè)錯(cuò)誤的原因是,Laravel 希望這樣的常規(guī)動(dòng)作有對(duì)應(yīng)的視圖,用來(lái)顯示內(nèi)容。沒(méi)有視圖可用,Laravel 就報(bào)錯(cuò)了。
新建文件 app/views/articles/create.blade.php,寫入如下代碼:
再次刷新 http://localhost:8000/article... , 可以看到頁(yè)面中顯示了一個(gè)標(biāo)頭?,F(xiàn)在路由、控制器、動(dòng)作和視圖都能正常運(yùn)行了。接下來(lái)要編寫新建文章的表單了。
2、首個(gè)表單
要在模板中編寫表單,可以使用“表單構(gòu)造器”。Laravel 中常用的表單構(gòu)造器是 Form。在 app/views/articles/create.blade.php 文件中加入以下代碼:
現(xiàn)在刷新頁(yè)面,會(huì)看到上述代碼生成的表單。在 Laravel 中編寫表單就是這么簡(jiǎn)單!
在 Form 方法的塊中,F(xiàn)orm::text 創(chuàng)建了兩個(gè)標(biāo)簽和兩個(gè)文本字段,一個(gè)用于文章標(biāo)題,一個(gè)用于文章內(nèi)容。最后,F(xiàn)orm::submit 創(chuàng)建一個(gè)提交按鈕。
修改 app/views/articles/create.blade.php 文件中的 Form::open,改成這樣:
{{ Form::open(array("url" => "articles")) }}
這里,我們把 url 參數(shù)的值設(shè)為 articles 。對(duì)應(yīng)的地址是 /articels,默認(rèn)情況下,這個(gè)表單會(huì)向這個(gè)路由發(fā)起 POST 請(qǐng)求。這個(gè)路由對(duì)應(yīng)于 ArticlesController 控制器的 store 動(dòng)作。
表單寫好了,路由也定義了,現(xiàn)在可以填寫表單,然后點(diǎn)擊提交按鈕新建文章了。
3、創(chuàng)建文章
提交表單,會(huì)看到一個(gè)白屏。現(xiàn)在暫且不管這個(gè)錯(cuò)誤。store 動(dòng)作的作用是把新文章保存到數(shù)據(jù)庫(kù)中。
提交表單后,其中的字段以參數(shù)的形式傳遞給 Laravel。這些參數(shù)可以在控制器的動(dòng)作中使用,完成指定的操作。要想查看這些參數(shù)的內(nèi)容,可以把 store 動(dòng)作改成:
public function store() { dd(Input::all()); }
dd 函數(shù)為 Laravel 內(nèi)置的打印輸出函數(shù),Input::all() 取得所有發(fā)出請(qǐng)求時(shí)傳入的輸入數(shù)據(jù)。
如果現(xiàn)在再次提交表單,不會(huì)再看到白屏錯(cuò)誤,而是會(huì)看到類似下面的文字:
store 動(dòng)作把表單提交的參數(shù)顯示出來(lái)了。不過(guò)這么做沒(méi)什么用,看到了參數(shù)又怎樣,什么都沒(méi)發(fā)生。
4、創(chuàng)建 Article 模型
在 Laravel 中,模型的名字使用單數(shù),對(duì)應(yīng)的數(shù)據(jù)表名使用復(fù)數(shù)。
創(chuàng)建 app/models/Article.php 并寫入以下代碼:
注意我們并沒(méi)有告訴 Eloquent Article 模型會(huì)使用哪個(gè)數(shù)據(jù)庫(kù)表。若沒(méi)有特別指定,系統(tǒng)會(huì)默認(rèn)自動(dòng)對(duì)應(yīng)名稱為「類名稱的小寫復(fù)數(shù)形態(tài)」的數(shù)據(jù)庫(kù)表。所以,在上面的例子中, Eloquent 會(huì)假設(shè) Article 將把數(shù)據(jù)存在 articles 數(shù)據(jù)庫(kù)表。
5、運(yùn)行遷移
使用 Artisan CLI 的 migrate:make 命令建立遷移文件:
$ php artisan migrate:make create_articles_table --create=articles
遷移文件會(huì)建立在 app/database/migrations 目錄下,文件名會(huì)包含時(shí)間戳,用于在執(zhí)行遷移時(shí)用來(lái)決定順序。
app/database/migrations/20140903084339createarticlestable.php (你的遷移文件名可能有點(diǎn)不一樣)文件的內(nèi)容如下所示:
修改其中的創(chuàng)建代碼為:
在這個(gè)遷移中定義了一個(gè)名為 up 的方法,在運(yùn)行遷移時(shí)執(zhí)行。up 方法中定義的操作都是可以通過(guò) down 方法實(shí)現(xiàn)可逆的,Laravel 知道如何撤銷這次遷移操作。運(yùn)行遷移后,會(huì)創(chuàng)建 articles 表,以及一個(gè)字符串字段和文本字段。同時(shí)還會(huì)創(chuàng)建兩個(gè)時(shí)間戳字段,用來(lái)跟蹤記錄的創(chuàng)建時(shí)間和更新時(shí)間。
然后,使用 Artisan 命令運(yùn)行遷移:
$ php artisan migrate
Laravel 會(huì)執(zhí)行遷移操作,告訴你創(chuàng)建了 articles 表。
Migration table created successfully. Migrated: 20140903084339createarticlestable
6、在控制器中保存數(shù)據(jù)
再回到 ArticlesController 控制器,我們要修改 store 動(dòng)作,使用 Article 模型把數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。打開 app/controllers/ArticlesController.php 文件,把 store 動(dòng)作修改成這樣:
同時(shí)在 app/models/Article.php 添加 :
protected $fillable = array("title", "text");
fillable 屬性允許在動(dòng)作中調(diào)用模型的 create 方法使用 title 和 text 屬性。
再次訪問(wèn) http://localhost:8000/article... ,填寫表單,還差一步就能創(chuàng)建文章了。
7、顯示文章
和前面一樣,我們要在 app/controllers/ArticlesController.php 文件中更改 show 動(dòng)作,以及相應(yīng)的視圖文件。
然后,新建 app/views/articles/show.blade.php 文件,寫入下面的代碼:
做了以上修改后,就能真正的新建文章了。訪問(wèn) http://localhost:8000/article... ,自己試試。
8、列出所有文章
我們還要列出所有文章,對(duì)應(yīng)的路由是:
GET|HEAD articles | articles.index | ArticlesController@index
在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 index 動(dòng)作:
然后編寫這個(gè)動(dòng)作的視圖,保存為 app/views/articles/index.blade.php:
現(xiàn)在訪問(wèn) http://localhost:8000/articles ,會(huì)看到已經(jīng)發(fā)布的文章列表。
9、添加鏈接
至此,我們可以新建、顯示、列出文章了。下面我們添加一些鏈接,指向這些頁(yè)面。
打開 app/views/welcome/index.blade.php 文件,添加:
{{ link_to_route("articles.index", "My Blog") }}
linktoroute 是 Laravel 內(nèi)置的視圖幫助方法之一,根據(jù)提供的文本和地址創(chuàng)建超鏈接。這上面這段代碼中,地址是文章列表頁(yè)面。
接下來(lái)添加到其他頁(yè)面的鏈接。先在 app/views/articles/index.blade.php 中添加“New Article”鏈接,放在