/** * 新しいスコープを作成する * * @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; }
/** * @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()); }
/** * モジュールテスト */ 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()); }
public function __construct(Scope $scope) { $scope->accept($this); $this->_scope = $scope; $this->initComponent(); }
/** * スタンドアローン版 */ 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; }