在Laravel中一步一步建立Packages,laravelpackages
首先要看一下Laravel官方文檔,這是最新4.2的文檔,如果想看中文的話點擊此處,基本一樣,這個github上的庫setup-laravel4-package,也是一步一步介紹如何建立一個包,並關聯相關資源。
這裡以建立一個account包為例:
1、如果是首次使用php artisan workbench命令,需要配置app/config/workbench.php中的name和email,在產生包的時候會使用這些資訊
2、在項目根目錄使用,下面的命令產生最初始的包目錄結構,其中--resources作用是產生相關的view、config和migrations等資來源目錄
1
php artisan workbench fstos/account --resources
包的根目錄在workbench/fstos/account目錄,其結構大概如下
12345678910
/src /Fstos /Account AccountServiceProvider.php /config /lang /migrations /views/tests/public
3、將包的'Fstos\Account\AccountServiceProvider'加入到app/config/app.php中"providers"數組中,這樣這個包會被載入到應用程式中
4、為本包添加獨立路由檔案,只需在AccountServiceProvider中的boot函數中添加如下代碼,並在包的根目錄建立routes.php檔案
12345
public function boot(){ $this->package('fstos/account'); include __DIR__.'/../../routes.php';}
路由檔案如下所示:
123
Route::get('account/register', function(){ return "account register router";});
5、OK,現在在你的瀏覽器測試吧,出現了"account register router",接下來我們嘗試使用controller
1
http://localhost/laravel/friends/public/account/register
6、修改routes如下所示:
1234
Route::get('account/register', array('as' => 'account.register.get', 'uses' => 'Fstos\Account\RegistrationController@getRegister') );
7、在controllers 中建立RegistrationController.php檔案,代碼如下:
12345678910111213141516171819202122232425262728293031
<?php namespace Fstos\Account; use Illuminate\Routing\Controller as Controller;use Illuminate\Support\Facades\View as View;use Illuminate\Support\Facades\Config as Config; class RegistrationController extends Controller{ /** * Display the registration form. * * @return \Illuminate\Http\Response */ public function getRegister() { return "yes,use controller with route in packages!"; } /** * 暫用不到 */ protected function setupLayout() { if (!is_null($this->layout)) { $this->layout = View::make($this->layout); } } }
嘗試重新整理頁面,啊哈,是不是報錯了,找不到"Fstos\Account\RegistrationController",Laravel預設是不自動尋找任何目錄的,需要開發人員自己指定檔案的存放目錄,不過它也給出了建議路徑,比如在使用artisan workbench的時候是不是產生了src/controllers目錄呢,Ok,我們添加自動載入路徑即可
8、在包的根目錄的composer.json的autoload下classmap欄位增加"src/controllers",並在項目根目錄運行 php artisan dump-autoload,OKOK,我們重新整理頁面,哈哈出現啦
9、接下來我們要使用views檔案!嗯嗯,按照我們理解我們只需要修改controller中代碼,是滴,如下:
12345
public function getRegister() { return View::make('account.register'); // return "yes,use controller with route in packages!"; }
很顯然他訪問的是app/views/account/register.blade.php視圖模板,我們建立這個檔案並寫入如下內容:
123
<div> we are shown in views!</div>
繼續重新整理頁面吧!哈哈哈,很幸運,是這個規則~,不過我們建立一個包並不期望把包中視圖放在app/views目錄吧,是滴,必須得整合到包中,記得src下也有個views呢,好滴好滴,我們把檔案放到包src/views/account/register.blade.php中,內容如下:
123
<div> we are shown in views under workbench!</div>
重新整理頁面吧,我擦,還是原來的頁面,是不是Laravel優先載入app/views下的模板檔案呢,我們刪除app/views/account/,再次重新整理頁面,又失望了,再次出現了not found頁面,在Laravel中,是不會自動索引包中的視圖檔案的,所以我們還需要做一點點工作!
10、在載入視圖的時候指定他去包中尋找視圖檔案即可,修改controller中代碼如下:
12345
public function getRegister() { return View::make('account::account.register'); // return "yes,use controller with route in packages!"; }
再次重新整理頁面,我們期待的頁面出現了,我們看到controller中使用到了account這個命令空間(具體含義可以看下laravel官方文檔),那麼這個空間是在哪裡指定的呢?
11、我們看下AccountServiceProvider.php檔案中boot函數中$this->package('fstos/account');這一行代碼,其實指定了這個包的命令空間和其綁定的目錄,神馬,看不粗來,是滴,這個函數還有第二個(空間名)和第三個(目錄)參數,不過這個兩個參數都有預設值,命名空間的預設值就是account,目錄預設值就是包根目錄下的src目錄,其實就相當於如下寫法:
1
$this->package('fstos/account',"account",__DIR__.'/../../');
Ok,你可以去嘗試~
小插曲,從第7條往後寫了兩遍,第一遍儲存的時候登入時間過長,儲存丟失了,我勒個去,心中各種罵,想想資料備份是多麼的重要~
這是我第一發布的位置:http://www.fstos.com/index.php/2014-05-26-09-01-36/81-laravel-packages
laravel建立第一個路由失敗,404錯誤怎處理
Route::get('/users' 多一個'/'就行了
類比人生3C:\Program Files\Electronic Arts\The Sims 3中添加了mods中還建立了packages
是最新版的resource.cfg 嗎?