2017-01-11 16 views
1

laravel 5.3でsaas application(ここではsaasはソフトウェアをサービスとして意味します)を構築しようとしています。私はViewServiceProviderを拡張してビューフォルダの宛先を実装しようとしています。たとえば、2つの異なるドメインに2つのテーマがあります。今、私はそれがそれぞれのテーマのモジュールを表示する必要がありますように、これらのドメインのために動的にフォルダ構造を定義したいlaravelでランタイム中にビューフォルダの宛先を設定する方法

View 
----| Theme One 
--------| Navbar 
--------| Sliders 
--------| Tabs 
--------| Parallax 
--------| Iconbox 
--------| template.blade.php 
----| Theme Two 
--------| Navbar 
--------| Sliders 
--------| Tabs 
--------| Parallax 
--------| Iconbox 
--------| template.blade.php 

:私は、このような何かを別のフォルダ内のビューでのHTMLコードのセットを持っています。私は、ナビゲーションバーのサブビューを含めたい場合は仮定のように、私はちょうど

@include('Navbar') 

を記述する必要があり、それはそれぞれのテーマナビゲーションバーのフォルダまたはサブビューにアクセスする必要があります。私はViewServiceProviderの延長だし、config/app.phpに、私はちょうどViewServiceProviderをコメントアウトしていると私が作ったWebViewServiceProviderを追加し、これを実現するために、それはここでは、目的地を設定していない私のコードは次のとおりです。

namespace Nitseditor\System\Providers; 

use Illuminate\View\FileViewFinder; 
use Illuminate\View\ViewServiceProvider; 
use Nitseditor\System\Models\Domain; 

class WebViewServiceProvider extends ViewServiceProvider 
{ 


    /** 
    * Register View Folder 
    * 
    * @return void 
    */ 
    public function registerViewFinder() 
    { 

     $this->app->bind('view.finder', function ($app) { 
      $paths = $app['config']['view.paths']; 

      $http_req = php_sapi_name() == 'cli' ? 'noetic.com' : $this->app['request']->server('HTTP_HOST'); 
      $domainName = explode(":", $http_req)[0]; 
      $domain = Domain::where('domain_name', $domainName)->first(); 

      if($domain) 
      { 
       foreach ($domain->themes as $theme) 
       { 
        $paths = 'Nitseditor\System\Resources\Views\Themes\\' . $theme->theme_name; 
       } 
      } 

      return new FileViewFinder($app['files'], array(base_path($paths))); 
     }); 
    } 
} 

マイ設定\ app.phpは、次のようになります。実行し、コントローラを介して確認しながら

//  Illuminate\View\ViewServiceProvider::class, 
Nitseditor\System\Providers\WebViewServiceProvider::class, 

私は意見の宛先パスがデフォルトと同じです見ることができます

class DomainController extends Controller { 

    public function checkDomain() 
    { 
     $app = App::make('config'); 
     dd($app); 
    } 
} 

Views directory check

編集

よく私は同じであることを起こる条件文なしで実行してみました。

public function registerViewFinder() 
{ 

    $this->app->bind('view.finder', function ($app) { 

     $paths = 'Nitseditor\System\Resources\Views\Themes\Themeone'; 

     return new FileViewFinder($app['files'], array(base_path($paths))); 
    }); 
} 

お手伝いします。

+0

'if($ domain)'になっていることを確認できますか? – Ohgodwhy

+0

@Ohgodwhyはいそうです。私は同じ方法でデータベース接続を設定しており、それは適切に起こっています。また、registerメソッドを使用するのではなく、 'webDatabaseServiceProvider'を起動メソッドで実行しました。私はブートメソッドで実装すれば実行すると思いますが、 'webViewServiceProvider'でエラーが発生します。 –

+0

@Ohgodwhyよく条件付きのステートメントを使わずに '$ paths = 'Nitseditor \ System \ Resources \ Views \ Themes \ Themeone';を実行し、' return new FileViewFinder($ app ['files']、array(base_path ($ paths))); '同じように起こります。 –

答えて

0

まあ私はコードをダンプしようとし続け、$app配列をチェックしようとしました。私は試してみると思いますApp::make::('config') laravelは設定ファイルから情報を収集し、動的設定が表示されていないアプリケーションの設定配列を表示します。

は、その後、私は単に私の見解を確認してみました:

return view('template'); 

これはよく、それが誰かを助けるかもしれない、私は必要な正確に何ブレードファイル/ビューを表示します。慌てないでください

$app = App::make('config'); 
dd($app); 

乾杯!

関連する問題