Example #1
0
 /**
  * 新しいスコープを作成する
  *
  * @param ScopeIF $parent
  * @param string $name
  */
 public static function create(ScopeIF $parent = null, $name = 'scope')
 {
     $s = new Scope();
     // スコープに名前を入れる
     $s->_name = $name;
     $s->initScope();
     // 親スコープを指定
     if ($parent !== null) {
         $s->setParent($parent);
     }
     return $s;
 }
Example #2
0
 /**
  * @covers ::__construct
  * @covers ::initComponent
  * @covers ::__call
  * @covers ::scope
  */
 public function testComponent()
 {
     $scope = Scope::create(null, 'ComponentScope');
     $scope->observe(function ($ev) {
         //var_dump($ev->toString());
         if ($ev->match("component.pre_initcomponent")) {
             $this->assertInstanceOf(__NAMESPACE__ . '\\Component', $ev->getSubject());
         }
     });
     $comp = new Component($scope);
     $this->assertEquals($scope, $comp->scope());
     $comp->setHelper('test', ['scope', 'component', function ($s, $c) {
         return $s;
     }]);
     $this->assertEquals($comp, $comp->test());
 }
Example #3
0
 /**
  * モジュールテスト
  */
 public function testModule()
 {
     $loader = new ModuleLoader(Scope::create()->setComponent('autoloader', function () {
         return Nora::Autoloader();
     }));
     // モジュールのロードディレクトリを作成
     $loader->addModulePath(TEST_PROJECT_PATH . '/modules');
     // モジュール生成時の処理
     $loader->on('moduleloader.loadmodule', function ($e) {
         if ($e->name === 'hoge') {
             $e->module->configure(['a' => '1234']);
         }
         if ($e->name === 'hoge2') {
             $e->module->configure(['a' => '5678']);
         }
     });
     $hoge = $loader->loadModule('hoge');
     $this->assertEquals('1234', $hoge->sayValueOfA());
     $this->assertEquals('fuga', $hoge->sayValueOfB());
     $this->assertEquals('5678', $loader->loadModule('hoge2')->sayValueOfA());
 }
Example #4
0
 public function __construct(Scope $scope)
 {
     $scope->accept($this);
     $this->_scope = $scope;
     $this->initComponent();
 }
Example #5
0
 /**
  * スタンドアローン版
  */
 public static function standalone()
 {
     $scope = Scope::create(null, 'NoraScope')->setComponent('Autoloader', function () {
         return Nora::Autoloader();
     })->on('app.pre_configure', function ($e) {
         # モジュールロードパスを追加
         $e->app->ModuleLoader()->addModulePath(realpath(__DIR__ . '/../modules'));
         # コンフィグロードパスを追加
         $e->app->Config()->addConfigDir(realpath(__DIR__ . '/../..') . '/config');
     });
     self::$_app = new App($scope);
     self::configure();
     return self::$_app;
 }