在Laravel中一步一步建立Packages,laravelpackages

來源:互聯網
上載者:User

在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 嗎?
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.