2014-02-14 181 views
0

我使用控制面板爲三種不同版本的服務器創建應用程序,並且它們可能有不同的數據庫佈局(這就是我模塊化的原因)。我正在關注this tutorial動態加載服務提供商

我該如何動態加載corrent服務器版本的服務提供者?每個版本都有它自己的文件夾,並且所選版本的存儲版本可以通過Config :: get訪問,它是否在服務提供商加載時已經加載?另外,如果我使用HMVC體系結構,我仍然可以使用默認文件夾(而不是模塊)作爲應用程序範圍內的服務器公共控制器嗎? (如新聞,這不是服務器相關的)。

如果我沒有說清楚,請詢問。

回答

0

據我所知,你不能dinamically加載沒有做一些奇怪的代碼中的服務提供商,但服務提供商的類加載器本身,你應該使用一個服務提供商來加載,動態的,你的服務:

<?php 

class ServiceProvider extends Illuminate\Support\ServiceProvider { 

    protected $defer = true; 

    public function register() 
    { 
     $this->app->bind('server', function($app) { 

      switch ($this->app['config']['serverVersion']) { 
       case 'versionX': 
        return new ServiceClassForServerX(); 
        break; 

       case 'versionY': 
        return new ServiceClassForServerY(); 
        break; 

       default: 
        return new ServiceClassForDefaultServer(); 
        break; 
      } 
     }); 
    } 

    public function provides() 
    { 
     return array('sever'); 
    } 

} 

關於文件夾,Laravel爲您提供了100%的自由選擇你想在app/*中使用的文件夾結構。

+0

好的,我已經讓一些服務提供商依賴於配置以前,這是一塊蛋糕。問題是我有一個通用的頁眉/頁腳,它創建了一些我只在特定的routes.php中定義的路由的鏈接(儘管所有的服務器都必須實現這些路由,比如account.create)。然後我得到'Route [account.create] not defined.'',即使'php artisan routes'報告'accounts.create'路線已經存在。 – ranisalt

+0

例如,如果用戶註銷,我有一個鏈接可以在每個頁面上創建一個指向'account.create'的新帳戶。我必須對鏈接進行硬編碼嗎? – ranisalt