解決了類自動加載的問題,剩下的問題就是看文檔了,laravel的官方文檔雖然簡單,但是卻包含了很多基礎知識,學習Laravel最好先看看官方文檔,我感覺幫助很大,因為laravel框架的源碼看起來並不容易,一層一層的套,看文檔會快一些,如果想更詳細的了解,可以考慮研究源碼。
考慮到laravel框架的復雜性,最好不要使用編輯器,要用IDE來開發,因為IDE可以調試、跳轉到類聲明文件等等,還包括一些自動完成的功能。不過如果堅持要使用編輯器,推薦用sublime,常見的IDE有Netbeans、PHPEclipse、Aptana、ZendStudio、PHPStorm,其中ZendStudio、PHPStorm是收費軟件,如果有錢是更好的選擇,如果注重版權,可以考慮Netbeans、PHPEclipse、Aptana,PHPEclipse和Aptana比較類似,我比較喜歡Netbeans和Aptana,它們都能提供語法加亮、代碼提示、調試、版本管理方面的支持,使用上都差不多,我選擇了Netbeans,因為Netbeans支持采用PHP內建的web服務器,對於開始一個新項目很方便,適合初學者,也可以選擇Aptana,只是麻煩一些,需要修改Apache配置文件,增加一個虛擬主機。
在使用IDE之前最好增加IDE支持,因為常見的IDE無法理解Laravel的Facades的工作方式(不僅IDE不懂,我也沒看懂),barryvdh開發了一個IDE-Helper工具,配置過程也比較簡單,官網很詳細,這里做個備注:
1)修改composer.json的內容如下
在require下增加 "barryvdh/laravel-ide-helper": "1.*"
然后在laravel根目錄(composer.json所在目錄)運行composer update,
或者直接運行:composer require barryvdh/laravel-ide-helper: 1.*
運行結束之后會在vendor目錄下增加一個barrayvdh的目錄。
2)在app/config/app.php中providers數組增加一行:
'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
3)現在其實已經可以代碼提示了,但是如果增加了新的組件,需要手工運行
php artisan clear-compiled
php artisan ide-helper:generate
也可以每次更新都自動生成,在composer.json中script->post-update-cmd下修改,增加如下
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan ide-helper:generate",
"php artisan optimize"
],
這樣就可以使用自動提示了,而且可以看一下laravel根目錄下自動生成的_ide-helper.php文件,可以看到很多類的相互關系,挺不錯的,比如在routes.php中Route,根據_ide-helper.php,可以知道Route對應的是\Illuminate\Routing\Router,根據vendor/composer/autoload_classmap.php文件的對應關系,可以知道,對應的是vendor/laravel/framework/src/Illuminate/Routing/Router.php。Netbeans的代碼跳轉往往也是跳到_ide-helper.php文件。
如果對PHP很熟悉,學習框架就非常簡單了,如果不是很熟悉,推薦手頭放一本PHP參考書備查,我覺的LAMP兄弟連的《細說PHP》不錯,如果經常使用,建議買一本。
根據官方文檔,一個請求的生命周期如下:
1)請求進入public/index.php文件,如果使用Apache服務器,會讀取根目錄的.htaccess文件,調用重寫功能,不需要輸入index.php,就可以調用了,不過在虛擬目錄的情況下,就得寫index.php才行。
2)調用bootstrap/start.php文件,創建應用(Illuminate\Foundation\Application)並檢查環境
3)調用framework/start.php,路徑為\vendor\laravel\framework\src\Illuminate\Foundation\start.php
4)裝載app/start目錄下的global.php、artisan.php、local.php
5)裝載app/routes.php
6)將Request對象發給Application,處理之后返回Response對象
7)將Response對象返回到client
這個過程比較復雜,注意上面的“裝載”、"調用"都是"require"的意思。但大部分內容我們不需要管,首先需要了解的是app/routes.php,這個是laravel的核心功能,會將你的請求轉到對應的資源上,如顯示頁面的php文件、控制器(php)文件等。
對於開發人員來數,需要注意的是routes.php,這個文件代表了每一個瀏覽器發出的請求最終調用的php程序,這一點其實和Java的MVC類似,PHP可以做到這種程度讓我有點驚訝。不過是好事情,意味着學習起來會比較容易。
routes.php中的路由調度常見的有一下模式
Route::get('/',function(){
return View::make('hello');
});
這里需要注意一下,Route實際上對應的是vendor/laravel/framework/src/Illuminate/Routing/Router.php,其中的/代表的是虛擬路徑,get代表請求方式,還可以是post方式,或者any(任意方式),View::make('hello')代表路由目標為app/view/hello.php,指向其他的文件,依此類推就可以了。
通常我們在轉向新的頁面的時候,需要攜帶一些對象或者數組過去,也很容易,只要
return View::make("hello")-)with('user',$user)->with('student',$student)
在新的頁面調用只要直接調用$user,$student就可以了。
上面的路由是最簡單的方式,如果在到達新的頁面之前需要更多的邏輯計算,就需要邏輯放到Controller類中,這樣會讓routes.php較為簡潔,當然Controller類中的邏輯如果過於復雜,也可以將邏輯分出來,比如業務邏輯較為復雜,可以將業務邏輯保存在其他的php文件,比如建立一個business目錄,用來保存商業邏輯。要記住將business目錄加入到composer.json的autoload下,才能自動被加載,被其他php文件調用。
所有的Controller類都要是BaseController的子類,BaseController位於/app/controller目錄下,路由調用方式如下
Route::get('user/profile',
array('as' => 'profile', 'uses' => 'UserController@showProfile'));
這里需要注意的是路由user/profile,指向目標為Controller類UserController的方法showProfile,profile是路由的名稱,在其他地方可以使用這個名字,跳轉到UserController的showProfile方法。
一般來說,知道這些就可以進行開發了,如果想知道更多,可以參考官方文檔,包括路由加參數,如user/profile/1這種方式,過濾器等。