예제 #1
0
 /**
  * Create view instance.
  * If no events manager provided - events would not be attached.
  *
  * @param DIBehaviour  $di             DI.
  * @param Config       $config         Configuration.
  * @param string       $viewsDirectory Views directory location.
  * @param Manager|null $em             Events manager.
  *
  * @return View
  */
 public static function factory($di, $config, $viewsDirectory, $em = null)
 {
     $view = new PhView();
     $volt = new PhVolt($view, $di);
     $volt->setOptions(["compiledPath" => $config->global->view->compiledPath, "compiledExtension" => $config->global->view->compiledExtension, 'compiledSeparator' => $config->global->view->compiledSeparator, 'compileAlways' => $config->global->view->compileAlways]);
     $compiler = $volt->getCompiler();
     $compiler->addExtension(new EnViewExtension());
     $compiler->addFilter('floor', 'floor');
     $compiler->addFunction('range', 'range');
     $compiler->addFunction('in_array', 'in_array');
     $compiler->addFunction('count', 'count');
     $compiler->addFunction('str_repeat', 'str_repeat');
     $view->registerEngines(['.volt' => $volt])->setRenderLevel(PhView::LEVEL_ACTION_VIEW)->setViewsDir($viewsDirectory);
     // Attach a listener for type "view".
     if ($em) {
         $em->attach("view", function ($event, $view) use($di, $config) {
             if ($config->global->profiler && $di->has('profiler')) {
                 if ($event->getType() == 'beforeRender') {
                     $di->get('profiler')->start();
                 }
                 if ($event->getType() == 'afterRender') {
                     $di->get('profiler')->stop($view->getActiveRenderPath(), 'view');
                 }
             }
             if ($event->getType() == 'notFoundView') {
                 throw new Exception('View not found - "' . $view->getActiveRenderPath() . '"');
             }
         });
         $view->setEventsManager($em);
     }
     $di->set('view', $view);
     return $view;
 }
예제 #2
0
파일: Module.php 프로젝트: kjmtrue/phanbook
 /**
  * Register the services here to make them general
  * or register in the ModuleDefinition to make them module-specific
  */
 public function registerServices(DiInterface $di)
 {
     //Read configuration
     $config = (include __DIR__ . "/config/config.php");
     // The URL component is used to generate all kind of urls in the application
     $di->set('url', function () use($config) {
         $url = new Url();
         $url->setBaseUri($config->application->baseUri);
         return $url;
     });
     //Registering a dispatcher
     $di->set('dispatcher', function () {
         //Create/Get an EventManager
         $eventsManager = new EventsManager();
         //Attach a listener
         $eventsManager->attach('dispatch', function ($event, $dispatcher, $exception) {
             //controller or action doesn't exist
             if ($event->getType() == 'beforeException') {
                 switch ($exception->getCode()) {
                     case Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                     case Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                         $dispatcher->forward(['module' => 'backend', 'controller' => 'errors', 'action' => 'notFound']);
                         return false;
                 }
             }
         });
         $dispatcher = new Dispatcher();
         $dispatcher->setDefaultNamespace("Phanbook\\Backend\\Controllers");
         $dispatcher->setEventsManager($eventsManager);
         return $dispatcher;
     });
     /**
      * Setting up the view component
      */
     $di->set('view', function () use($config) {
         $view = new View();
         $view->setViewsDir($config->application->viewsDir);
         $view->disableLevel([View::LEVEL_MAIN_LAYOUT => true, View::LEVEL_LAYOUT => true]);
         $view->registerEngines(['.volt' => 'volt']);
         // Create an event manager
         $eventsManager = new EventsManager();
         // Attach a listener for type 'view'
         $eventsManager->attach('view', function ($event, $view) {
             if ($event->getType() == 'notFoundView') {
                 throw new \Exception('View not found!!! (' . $view->getActiveRenderPath() . ')');
             }
         });
         // Bind the eventsManager to the view component
         $view->setEventsManager($eventsManager);
         return $view;
     });
     $configMenu = (include __DIR__ . "/config/config.menu.php");
     $di->setShared('menuStruct', function () use($configMenu) {
         // if structure received from db table instead getting from $config
         // we need to store it to cache for reducing db connections
         $struct = $configMenu->get('menuStruct')->toArray();
         return $struct;
     });
 }
예제 #3
0
파일: Module.php 프로젝트: kjmtrue/phanbook
 /**
  * Register the services here to make them general
  * or register in the ModuleDefinition to make them module-specific
  */
 public function registerServices(DiInterface $di)
 {
     /**
      * Read configuration
      */
     //$config = include __DIR__ . "/config/config.php";
     //Registering a dispatcher
     $di->set('dispatcher', function () {
         $eventsManager = new EventsManager();
         $eventsManager->attach("dispatch", function ($event, $dispatcher, $exception) {
             //controller or action doesn't exist
             $object = $event->getData();
             if ($event->getType() == 'beforeException') {
                 switch ($exception->getCode()) {
                     case Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                     case Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                         $dispatcher->forward(['controller' => 'errors', 'action' => 'index']);
                         return false;
                     case Dispatcher::EXCEPTION_CYCLIC_ROUTING:
                         $dispatcher->forward(['controller' => 'errors', 'action' => 'show404']);
                         return false;
                 }
             }
         });
         $dispatcher = new Dispatcher();
         $dispatcher->setDefaultNamespace("Phanbook\\Frontend\\Controllers");
         $dispatcher->setEventsManager($eventsManager);
         return $dispatcher;
     });
     /**
      * Setting up the view component
      */
     $di->set('view', function () use($di) {
         $config = $di->get('config');
         $view = new View();
         $view->setViewsDir(ROOT_DIR . 'content/themes/' . $config->theme);
         $view->disableLevel([View::LEVEL_MAIN_LAYOUT => true, View::LEVEL_LAYOUT => true]);
         $view->registerEngines(['.volt' => 'volt']);
         // Create an event manager
         $eventsManager = new EventsManager();
         $eventsManager->attach('view', function ($event, $view) {
             if ($event->getType() == 'notFoundView') {
                 throw new \Exception('View not found!!! (' . $view->getActiveRenderPath() . ')');
             }
         });
         // Bind the eventsManager to the view component
         $view->setEventsManager($eventsManager);
         return $view;
     });
 }
예제 #4
0
파일: View.php 프로젝트: xueron/pails
 /**
  * @param $container
  */
 public function boot(Container $container)
 {
     $container->setShared('view', function () {
         $view = new PhalconView();
         $view->setEventsManager($this->getShared('eventsManager'));
         $view->setViewsDir($this->path('views'));
         $view->registerEngines(['.volt' => 'volt', '.phtml' => 'Phalcon\\Mvc\\View\\Engine\\Php']);
         return $view;
     });
     $container->setShared('volt', function () {
         $volt = new Volt($this->get('view'));
         $volt->setOptions(['compiledPath' => $this->tmpPath() . '/cache/volt/', 'compiledSeparator' => '_', 'compileAlways' => true]);
         $volt->getCompiler()->addExtension(new \Pails\Extensions\Volt());
         return $volt;
     });
 }
예제 #5
0
 /**
  * Register the services here to make them general
  * or register in the ModuleDefinition to make them module-specific
  */
 public function registerServices(DiInterface $di)
 {
     $di->set('view', function () {
         $view = new View();
         $view->setViewsDir(__DIR__ . '/views/');
         $view->disableLevel([View::LEVEL_MAIN_LAYOUT => true, View::LEVEL_LAYOUT => true]);
         $view->registerEngines(['.volt' => 'volt']);
         // Create an event manager
         $eventsManager = new EventsManager();
         $eventsManager->attach('view', function ($event, $view) {
             if ($event->getType() == 'notFoundView') {
                 throw new \Exception('View not found!!! (' . $view->getActiveRenderPath() . ')');
             }
         });
         // Bind the eventsManager to the view component
         $view->setEventsManager($eventsManager);
         return $view;
     });
 }
예제 #6
0
 /**
  * Tests the View::getActiveRenderPath
  *
  * @issue  12139
  * @author Serghei Iakovlev <*****@*****.**>
  * @since  2014-08-14
  */
 public function testGetActiveRenderPath()
 {
     $this->specify('The View::getActiveRenderPath returns unexpected result', function () {
         $view = new View();
         $eventsManager = new Manager();
         $eventsManager->attach('view', new ViewAfterRenderListener());
         $view->setViewsDir(PATH_DATA . 'views');
         $view->setRenderLevel(View::LEVEL_ACTION_VIEW);
         $view->setEventsManager($eventsManager);
         expect($view->getActiveRenderPath())->equals('');
         $view->start();
         $view->render('test15', 'index');
         $view->finish();
         $view->getContent();
         expect($view->getActiveRenderPath())->equals(PATH_DATA . 'views' . DIRECTORY_SEPARATOR . 'test15' . DIRECTORY_SEPARATOR . 'index.phtml');
         $view->setViewsDir([PATH_DATA . 'views', PATH_DATA . 'views2']);
         expect($view->getActiveRenderPath())->equals([PATH_DATA . 'views' . DIRECTORY_SEPARATOR . 'test15' . DIRECTORY_SEPARATOR . 'index.phtml']);
     });
 }
예제 #7
0
 /**
  * Register the services here to make them general or register in the ModuleDefinition to make them module-specific
  */
 public function registerServices(\Phalcon\DiInterface $di)
 {
     /**
      * Read configuration
      */
     $config = (include __DIR__ . "/config/config.php");
     /**
      * Setting up the view component
      */
     // The URL component is used to generate all kind of urls in the application
     $di->set('url', function () {
         $url = new Url();
         $url->setBaseUri('/');
         return $url;
     });
     /**
      * Setting up the view component
      */
     $di->set('view', function () use($config) {
         $view = new View();
         $view->setViewsDir($config->application->view->viewsDir);
         $view->disableLevel([View::LEVEL_MAIN_LAYOUT => true, View::LEVEL_LAYOUT => true]);
         $view->registerEngines(['.volt' => function () use($view, $config) {
             $volt = new Volt($view);
             $volt->setOptions(['compiledPath' => $config->application->view->compiledPath, 'compiledSeparator' => $config->application->view->compiledSeparator, 'compiledExtension' => $config->application->view->compiledExtension, 'compileAlways' => true]);
             return $volt;
         }]);
         // Create an event manager
         $eventsManager = new EventsManager();
         // Attach a listener for type 'view'
         $eventsManager->attach('view', function ($event, $view) {
             if ($event->getType() == 'notFoundView') {
                 throw new \Exception('View not found!!! (' . $view->getActiveRenderPath() . ')');
             }
         });
         // Bind the eventsManager to the view component
         $view->setEventsManager($eventsManager);
         return $view;
     });
 }
예제 #8
0
 /**
  * Register the services here to make them general
  * or register in the ModuleDefinition to make them module-specific
  */
 public function registerServices(DiInterface $di)
 {
     //Read configuration
     $config = (include __DIR__ . "/config/config.php");
     $configGlobal = $di->getConfig();
     $di->set('url', function () use($config, $configGlobal) {
         $url = new Url();
         if (APPLICATION_ENV == 'production') {
             $url->setStaticBaseUri($configGlobal->application->production->staticBaseUri);
         } else {
             $url->setStaticBaseUri($configGlobal->application->development->staticBaseUri);
         }
         $url->setBaseUri($config->application->baseUri);
         return $url;
     });
     //Registering a dispatcher
     $di->set('dispatcher', function () {
         $eventsManager = $this->getEventsManager();
         $eventsManager->attach("dispatch", function ($event, $dispatcher, $exception) {
             //controller or action doesn't exist
             if ($event->getType() == 'beforeException') {
                 $message = $exception->getMessage();
                 $response = $this->getResponse();
                 switch ($exception->getCode()) {
                     case Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                         $response->redirect();
                         return false;
                     case Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                         $response->redirect('action-not-found?msg=' . $message);
                         return false;
                     case Dispatcher::EXCEPTION_CYCLIC_ROUTING:
                         $response->redirect('cyclic-routing?msg=' . $message);
                         return false;
                 }
             }
         });
         $dispatcher = new Dispatcher();
         $dispatcher->setDefaultNamespace("Phanbook\\Frontend\\Controllers");
         $dispatcher->setEventsManager($eventsManager);
         return $dispatcher;
     });
     /**
      * Setting up the view component
      */
     $di->set('view', function () use($di) {
         $config = $di->get('config');
         $view = new View();
         $view->setViewsDir(ROOT_DIR . 'content/themes/' . $config->theme);
         $view->disableLevel([View::LEVEL_MAIN_LAYOUT => true, View::LEVEL_LAYOUT => true]);
         $view->registerEngines(['.volt' => 'volt']);
         // Create an event manager
         $eventsManager = $this->getEventsManager();
         $eventsManager->attach('view', function ($event, $view) {
             if ($event->getType() == 'notFoundView') {
                 throw new \Exception('View not found!!! (' . $view->getActiveRenderPath() . ')');
             }
         });
         // Bind the eventsManager to the view component
         $view->setEventsManager($eventsManager);
         return $view;
     });
 }
예제 #9
0
파일: Bootstrap.php 프로젝트: huoybb/forum
 /**
  * Initialize the View.
  *
  * Setting up the view component.
  *
  *
  * @param DiInterface   $di     Dependency Injector
  * @param Config        $config App config
  * @param EventsManager $em     Events Manager
  *
  * @return Loader
  */
 protected function initView(DiInterface $di, Config $config, EventsManager $em)
 {
     $di->set('view', function () use($di, $config, $em) {
         $view = new View();
         $view->registerEngines(['.volt' => function ($view, $di) use($config) {
             $volt = new VoltEngine($view, $di);
             $voltConfig = $config->get('volt')->toArray();
             $options = ['compiledPath' => $voltConfig['cacheDir'], 'compiledExtension' => $voltConfig['compiledExt'], 'compiledSeparator' => $voltConfig['separator'], 'compileAlways' => ENV_DEVELOPMENT === APPLICATION_ENV && $voltConfig['forceCompile']];
             $volt->setOptions($options);
             $compiler = $volt->getCompiler();
             $compiler->addFunction('number_format', function ($resolvedArgs) {
                 return 'number_format(' . $resolvedArgs . ')';
             });
             $compiler->addFunction('chr', function ($resolvedArgs) {
                 return 'chr(' . $resolvedArgs . ')';
             });
             return $volt;
         }, '.phtml' => 'Phalcon\\Mvc\\View\\Engine\\Php']);
         $view->setViewsDir($config->get('application')->viewsDir);
         $em->attach('view', function ($event, $view) use($di, $config) {
             /**
              * @var LoggerInterface $logger
              * @var View $view
              * @var Event $event
              * @var DiInterface $di
              */
             $logger = $di->get('logger');
             $logger->debug(sprintf('Event %s. Path: %s', $event->getType(), $view->getActiveRenderPath()));
             if ('notFoundView' == $event->getType()) {
                 $message = sprintf('View not found: %s', $view->getActiveRenderPath());
                 $logger->error($message);
                 throw new ViewException($message);
             }
         });
         $view->setEventsManager($em);
         return $view;
     });
 }
예제 #10
0
 public function testIssue907()
 {
     $view = new View();
     $view->setBasePath(__DIR__ . '/../');
     $view->setViewsDir('unit-tests/views/');
     $listener = new \ViewAfterRenderListener();
     $eventsManager = new \Phalcon\Events\Manager();
     $eventsManager->attach('view', $listener);
     $view->setEventsManager($eventsManager);
     $view->start();
     $view->render('test3', 'other');
     $view->finish();
     $this->assertEquals($view->getContent(), '<html>lolhere</html>' . PHP_EOL);
     $this->assertEquals('1,3,6', $listener->getLevels());
     $listener->reset();
     //Templates
     $view->setTemplateAfter('test');
     $view->start();
     $view->render('test3', 'other');
     $view->finish();
     $this->assertEquals($view->getContent(), '<html>zuplolhere</html>' . PHP_EOL);
     $this->assertEquals('1,3,5,6', $listener->getLevels());
     $listener->reset();
     $view->cleanTemplateAfter();
     //Render Levels
     $view->setRenderLevel(View::LEVEL_MAIN_LAYOUT);
     $view->start();
     $view->render('test3', 'other');
     $view->finish();
     $this->assertEquals($view->getContent(), '<html>lolhere</html>' . PHP_EOL);
     $this->assertEquals('1,3,6', $listener->getLevels());
     $listener->reset();
     $view->setRenderLevel(View::LEVEL_LAYOUT);
     $view->start();
     $view->render('test3', 'other');
     $view->finish();
     $this->assertEquals($view->getContent(), 'lolhere');
     $this->assertEquals('1,3', $listener->getLevels());
     $listener->reset();
     $view->setRenderLevel(View::LEVEL_ACTION_VIEW);
     $view->start();
     $view->render('test3', 'other');
     $view->finish();
     $this->assertEquals($view->getContent(), 'here');
     $this->assertEquals('1', $listener->getLevels());
     $listener->reset();
 }
예제 #11
0
});
//  Setting up the view component
$di->set('view', function () use($di, $eventsManager) {
    $config = $di->get('config');
    $view = new View($config->toArray());
    $view->setViewsDir($config->application->view->viewsDir);
    $view->disableLevel([View::LEVEL_MAIN_LAYOUT => true, View::LEVEL_LAYOUT => true]);
    $view->registerEngines(['.volt' => 'volt']);
    // Attach a listener for type 'view'
    $eventsManager->attach('view', function ($event, $view) {
        if ($event->getType() == 'notFoundView') {
            throw new \Exception('View not found!!! (' . $view->getActiveRenderPath() . ')');
        }
    });
    // Bind the eventsManager to the view component
    $view->setEventsManager($eventsManager);
    return $view;
});
// Register the flash service with custom CSS classes
$di->set('flashSession', function () {
    $flash = new Session(['error' => 'alert alert-danger', 'success' => 'alert alert-success', 'notice' => 'alert alert-info', 'warning' => 'alert alert-warning']);
    return $flash;
});
// Database connection is created based in the parameters defined in the configuration file
$di->set('db', function () use($di) {
    $config = $di->get('config');
    $connection = new Mysql(['host' => $config->database->mysql->host, 'username' => $config->database->mysql->username, 'password' => $config->database->mysql->password, 'dbname' => $config->database->mysql->dbname, 'options' => [\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . $config->database->mysql->charset]]);
    if ($config->application->debug) {
        $eventsManager = new EventsManager();
        $logger = new FileLogger(ROOT_DIR . 'content/logs/db.log');
        //Listen all the database events
예제 #12
0
 /**
  * Tests the View::getCurrentRenderLevel
  *
  * @issue  907
  * @author Volodymyr Kolesnykov <*****@*****.**>
  * @since  2013-10-03
  */
 public function testGetCurrentRenderLevel()
 {
     $this->specify('The View listener does not fetch current render level correctly', function () {
         $view = new View();
         $listener = new AfterRenderListener();
         $eventsManager = new Manager();
         $eventsManager->attach('view', $listener);
         $view->setViewsDir(PATH_DATA . 'views' . DIRECTORY_SEPARATOR);
         $view->setEventsManager($eventsManager);
         $view->start();
         $view->render('test3', 'other');
         $view->finish();
         expect($view->getContent())->equals("<html>lolhere</html>\n");
         expect($listener->getLevels())->equals('1,3,5');
         $listener->reset();
         $view->setTemplateAfter('test');
         $view->start();
         $view->render('test3', 'other');
         $view->finish();
         expect($view->getContent())->equals("<html>zuplolhere</html>\n");
         expect($listener->getLevels())->equals('1,3,4,5');
         $listener->reset();
         $view->cleanTemplateAfter();
         $view->setRenderLevel(View::LEVEL_MAIN_LAYOUT);
         $view->start();
         $view->render('test3', 'other');
         $view->finish();
         expect($view->getContent())->equals("<html>lolhere</html>\n");
         expect($listener->getLevels())->equals('1,3,5');
         $listener->reset();
         $view->setRenderLevel(View::LEVEL_LAYOUT);
         $view->start();
         $view->render('test3', 'other');
         $view->finish();
         expect($view->getContent())->equals('lolhere');
         expect($listener->getLevels())->equals('1,3');
         $listener->reset();
         $view->setRenderLevel(View::LEVEL_ACTION_VIEW);
         $view->start();
         $view->render('test3', 'other');
         $view->finish();
         expect($view->getContent())->equals('here');
         expect($listener->getLevels())->equals('1');
         $listener->reset();
     });
 }
예제 #13
0
 /**
  * Register services
  *
  * @param DiInterface $di
  */
 public final function registerServices(DiInterface $di)
 {
     $module = $this->module;
     $baseControllers = $this->baseControllers;
     //Registering a dispatcher
     $di->set('dispatcher', function () use($di, &$module, &$baseControllers) {
         //Create new Dispatcher
         $dispatcher = new PDispatcher();
         //Set default namespace to this module
         $dispatcher->setModuleName($this->module);
         //Set default namespace
         $dispatcher->setDefaultNamespace($baseControllers);
         //Set default controller
         $dispatcher->setDefaultController($this->defaultController);
         /**
          * Get Event Manager
          *
          * @var \Phalcon\Events\Manager $eventsManager
          */
         $eventsManager = $di->getShared('eventsManager');
         //Attach acl in dispatcher
         $eventsManager->attach('dispatch', $di->get('acl'));
         //Set event manager
         $dispatcher->setEventsManager($eventsManager);
         return $dispatcher;
     });
     //Register the view component
     $di->set('view', function () use($di, &$module) {
         //Create Phalcon\Mvc\View
         $view = new ZView();
         $template = new ZTemplate($this->module);
         //Attach event
         $eventsManager = $di->getShared('eventsManager');
         if (method_exists($eventsManager, 'attach')) {
             $eventsManager->attach('view:beforeRender', $template);
             $eventsManager->attach('view:afterRender', $template);
             $eventsManager->attach('view:beforeRenderView', $template);
         } else {
             die(__FILE__ . ' Error: ZCMS cannot render template');
         }
         //Set view Event
         $view->setEventsManager($eventsManager);
         //Set view dir
         $view->setViewsDir(APP_DIR . '/backend/' . $module . '/views/');
         //Register engines
         $view->registerEngines(['.volt' => function ($view, $di) {
             $volt = new Volt($view, $di);
             $volt->setOptions(['compiledPath' => function ($templatePath) {
                 $templatePath = strstr($templatePath, '/app');
                 $dirName = dirname($templatePath);
                 if (!is_dir(ROOT_PATH . '/cache/volt' . $dirName)) {
                     mkdir(ROOT_PATH . '/cache/volt' . $dirName, 0755, TRUE);
                 }
                 return ROOT_PATH . '/cache/volt' . $dirName . '/' . basename($templatePath, '.volt') . '.php';
             }, 'compileAlways' => method_exists($di, 'get') ? (bool) $di->get('config')->backendTemplate->compileTemplate : false]);
             $compiler = $volt->getCompiler();
             $compiler->addFunction('get_sidebar', 'get_sidebar');
             $compiler->addFunction('__', '__');
             $compiler->addFunction('strtotime', 'strtotime');
             $compiler->addFunction('human_timing', 'human_timing');
             $compiler->addFunction('moneyFormat', 'moneyFormat');
             $compiler->addFunction('number_format', 'number_format');
             $compiler->addFunction('change_date_format', 'change_date_format');
             $compiler->addFunction('in_array', 'in_array');
             return $volt;
         }]);
         return $view;
     }, true);
 }
예제 #14
0
 /**
  * Register services
  *
  * @param DiInterface $di
  */
 public function registerServices(DiInterface $di)
 {
     $module = $this->module;
     $baseControllers = $this->baseControllers;
     //Registering a dispatcher
     $di->set('dispatcher', function () use($di, &$module, &$baseControllers) {
         /**
          * @var \Phalcon\Events\ManagerInterface $eventsManager
          */
         $eventsManager = $di->getShared('eventsManager');
         $eventsManager->attach("dispatch:beforeException", function ($event, $dispatcher, $exception) {
             /**
              * @var Dispatcher $dispatcher
              * @var \Phalcon\Mvc\Dispatcher\Exception $exception
              */
             switch ($exception->getCode()) {
                 case Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                 case Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                     $dispatcher->forward(['module' => 'index', 'controller' => 'error', 'action' => 'notFound404']);
                     return false;
             }
             return true;
         });
         $dispatcher = new Dispatcher();
         //Set default namespace to this module
         $dispatcher->setDefaultNamespace($baseControllers);
         $dispatcher->setEventsManager($eventsManager);
         $dispatcher->setModuleName($module);
         return $dispatcher;
     });
     //Registering the view component
     $di->set('view', function () use($di, &$module) {
         $view = new View();
         $view->setViewsDir(APP_DIR . '/frontend/' . $module . '/views/');
         /**
          * @var \Phalcon\Events\Manager $eventsManager
          */
         $eventsManager = $di->getShared('eventsManager');
         $eventsManager->attach('view:beforeRender', new ZFrontTemplate($this->module));
         $eventsManager->attach('view:afterRender', new ZFrontTemplate($this->module));
         //Set view Event
         $view->setEventsManager($eventsManager);
         $view->registerEngines(['.volt' => function ($view, $di) {
             $volt = new Volt($view, $di);
             $volt->setOptions(['compiledPath' => function ($templatePath) {
                 $templatePath = strstr($templatePath, '/app');
                 $dirName = dirname($templatePath);
                 if (!is_dir(ROOT_PATH . '/cache/volt' . $dirName)) {
                     mkdir(ROOT_PATH . '/cache/volt' . $dirName, 0755, true);
                 }
                 return ROOT_PATH . '/cache/volt' . $dirName . '/' . basename($templatePath, '.volt') . '.php';
             }, 'compileAlways' => method_exists($di, 'get') ? (bool) $di->get('config')->frontendTemplate->compileTemplate : false, 'stat' => false]);
             $compiler = $volt->getCompiler();
             $compiler->addFunction('get_sidebar', 'get_sidebar');
             $compiler->addFunction('__', '__');
             $compiler->addFilter('t', function ($resolvedArgs) {
                 return '__(' . $resolvedArgs . ')';
             });
             $compiler->addFunction('strtotime', 'strtotime');
             $compiler->addFunction('human_timing', 'human_timing');
             $compiler->addFunction('moneyFormat', 'moneyFormat');
             $compiler->addFunction('number_format', 'number_format');
             $compiler->addFunction('zcms_header', 'zcms_header');
             $compiler->addFunction('zcms_header_prefix', 'zcms_header_prefix');
             $compiler->addFunction('change_date_format', 'change_date_format');
             $compiler->addFunction('in_array', 'in_array');
             return $volt;
         }]);
         return $view;
     });
 }
예제 #15
0
파일: Bootstrap.php 프로젝트: phalcon/forum
 /**
  * Initialize the View.
  *
  * Setting up the view component.
  */
 protected function initView()
 {
     $this->di->set('view', function () {
         /** @var DiInterface $this */
         $config = $this->getShared('config');
         $em = $this->getShared('eventsManager');
         $view = new View();
         $view->registerEngines(['.volt' => function ($view, $di) {
             /** @var DiInterface $this */
             $config = $this->getShared('config');
             $volt = new VoltEngine($view, $di);
             $options = ['compiledPath' => function ($templatePath) {
                 /** @var DiInterface $this */
                 $config = $this->getShared('config')->get('volt')->toArray();
                 $filename = str_replace(['\\', '/'], $config['separator'], trim(substr($templatePath, strlen(BASE_DIR)), '\\/'));
                 $filename = basename($filename, '.volt') . $config['compiledExt'];
                 $cacheDir = rtrim($config['cacheDir'], '\\/') . DIRECTORY_SEPARATOR;
                 if (!is_dir($cacheDir)) {
                     @mkdir($cacheDir, 0755, true);
                 }
                 return rtrim($config['cacheDir'], '\\/') . DIRECTORY_SEPARATOR . $filename;
             }, 'compileAlways' => boolval($config->get('volt')->forceCompile)];
             $volt->setOptions($options);
             $volt->getCompiler()->addFunction('number_format', function ($resolvedArgs) {
                 return 'number_format(' . $resolvedArgs . ')';
             })->addFunction('chr', function ($resolvedArgs) {
                 return 'chr(' . $resolvedArgs . ')';
             });
             return $volt;
         }, '.phtml' => Php::class]);
         $view->setViewsDir($config->get('application')->viewsDir);
         $that = $this;
         $em->attach('view', function ($event, $view) use($that, $config) {
             /**
              * @var LoggerInterface $logger
              * @var View $view
              * @var Event $event
              * @var DiInterface $that
              */
             $logger = $that->get('logger');
             $logger->debug(sprintf('Event %s. Path: %s', $event->getType(), $view->getActiveRenderPath()));
             if ('notFoundView' == $event->getType()) {
                 $message = sprintf('View not found: %s', $view->getActiveRenderPath());
                 $logger->error($message);
                 throw new ViewException($message);
             }
         });
         $view->setEventsManager($em);
         return $view;
     });
 }