2014-03-14 2 views
1

이 모듈 솔루션이 함께 제공되었는데 문제가 있는지 궁금합니다.Laravel modules

composer.json이

"autoload" : { 
    "classmap" : [ 
     "....", 
     "app/modules" 
    ], 
    "psr-4" : { 
     "modules\\" : "app" 
    } 
} 

응용 프로그램/설정/app.php

'provider' => array(
    '....', 
    'Modules\ServiceProvider\ModulesServiceProvider' 

응용 프로그램/모듈/ModulesServiceProvider.php

<?php 

namespace Modules\ServiceProvider; 

use Illuminate\Support\ServiceProvider; 

class ModulesServiceProvider extends ServiceProvider 
{ 
    public function register() { 
     $this->app->bind('modules', function() 
     { 
      return new Modules; 
     }); 
    } 

    public function boot() { 

     // set modules path 
     $modules_path = __DIR__ . '/'; 
     // scan modules directory 
     $modules = scandir($modules_path); 

     foreach($modules as $module) 
     { 
      if($module === '.' || $module === '..') continue; 
      // check if module exist 
      if(is_dir($modules_path) . '/' . $module) 
      { 
       // set routes.php path 
       $routes_path = $modules_path . $module . '/routes.php'; 
          // set modules views path 
       $views_path = $modules_path . $module . '/views'; 
       // if routes.php exists 
       if(file_exists($routes_path)) 
       { 
        // required routes.php 
        \View::addNamespace($module, $views_path); 
        require_once($routes_path); 
       } 
       else 
       { 
        // else do ... what ?? 
        continue; 
       } 
      } 
     } 
    } 
} 

모든 것이 잘 작동, 나는를 호출 할 수 있습니다 View :: make ('moduleName :: viewName')를 사용하면 각 모듈에 경로가 정의되어 쉽게 유지 관리 할 수 ​​있습니다.

좋은 해결책이 아닌 경우 설명해주세요. 여기

+1

나에게 잘 보이는,하지만,이 라인 : '.''경우 ($ 모듈 === || $ 모듈 === '..') 계속됩니다. ','평등하지 않습니까? ' 이렇게 :'if ($ module! = '.'&& $ module! = '..') {// 처리하지} else {// process};'그런 식으로'.' &'. '은 포함되지 않습니다. - 편집자 - 모든 것을 잊어 버리십시오, 반복 루프 반복자에 대해 완전히 잊어 버렸습니다. –

+0

감사합니다 @ 스티브 베만이 여기 있습니다. 하지만이 솔루션을 사용할 때마다 컨트롤러에 use 문을 포함 시켜서 사용하고 싶을 때마다 (예 : View 사용); 입력을 사용하십시오; BaseController를 사용하십시오. ....이 기술은 성능 관점에서 어떤 문제가 있습니까? – lesandru

답변

0

내가 내 패키지 l5-modular에 그것을 한 적이 방법은 다음과 같습니다

protected $files; 

/** 
* Bootstrap the application services. 
* 
* @return void 
*/ 
public function boot() { 
    if(is_dir(app_path().'/Modules/')) { 
     $modules = array_map('class_basename', $this->files->directories(app_path().'/Modules/')); 
     foreach($modules as $module) { 

      $routes = app_path().'/Modules/'.$module.'/routes.php'; 
      $views = app_path().'/Modules/'.$module.'/Views'; 
      $trans = app_path().'/Modules/'.$module.'/Translations'; 
      if($this->files->exists($routes)) include $routes; 
      if($this->files->isDirectory($views)) $this->loadViewsFrom($views, $module); 
      if($this->files->isDirectory($trans)) $this->loadTranslationsFrom($trans, $module); 
     } 
    } 
}