/** * * Register the services here to make them module-specific * */ public function registerServices($di) { // get bootstrap obj $bootstrap = $di->get('bootstrap'); // get config class name $confClass = $bootstrap->getConfClass(); // module config $mConfPath = __DIR__ . '/confs/' . PHALCON_ENV . '.' . PHALCON_CONF_TYPE; if (!is_file($mConfPath)) { throw new \Phalcon\Config\Exception("Module config file not exist, file position: {$mConfPath}"); } if (PHALCON_CONF_TYPE == 'ini') { $mConfig = new $confClass($mConfPath); } else { if (PHALCON_CONF_TYPE == 'php') { $mConfig = new $confClass(require_once $mConfPath); } } // global config $gConfig = $di->get('config'); // merge module config and global config, module's will override global's $gConfig->merge($mConfig); // set config back $di->set('config', $gConfig); // registering a dispatcher $di->set('dispatcher', function () use($di) { $evtManager = $di->getShared('eventsManager'); $evtManager->attach("dispatch:beforeException", function ($event, $dispatcher, $exception) { switch ($exception->getCode()) { case \Phalcon\Mvc\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND: case \Phalcon\Mvc\Dispatcher::EXCEPTION_ACTION_NOT_FOUND: $dispatcher->forward(array('module' => 'sample', 'controller' => 'error', 'action' => 'show404')); return false; } }); $acl = new \BullSoft\Sample\Plugins\Acl($di, $evtManager); $evtManager->attach('dispatch', $acl); $dispatcher = new \Phalcon\Mvc\Dispatcher(); $dispatcher->setEventsManager($evtManager); $dispatcher->setDefaultNamespace("BullSoft\\Sample\\Controllers\\"); return $dispatcher; }); // set view with volt $di->set('view', function () { $view = new \Phalcon\Mvc\View(); $view->setViewsDir(__DIR__ . '/views/'); $view->registerEngines(array(".volt" => function ($view, $di) { $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di); $volt->setOptions(array("compiledPath" => $di->get('config')->view->compiledPath, "compiledExtension" => $di->get('config')->view->compiledExtension, "compileAlways" => (bool) $di->get('config')->application->debug)); $compiler = $volt->getCompiler(); $compiler->addExtension(new \BullSoft\Volt\Extension\PhpFunction()); return $volt; })); return $view; }); }
public function pjCenterAction($raise_id) { if ($this->request->isGet()) { $raise_id = $this->request->getQuery('raise_id'); if (empty($raise_id)) { die('invaild project'); } $query = Criteria::fromInput($this->di, "DtbRaiseProjectBasic", $_GET); $this->persistent->parameters = $query->getParams(); $parameters = $this->persistent->parameters; $dtb_raise_project_basic = DtbRaiseProjectBasic::findFirst($parameters); $this->view->dtb_raise_project_basic = $dtb_raise_project_basic; $volt = new \Phalcon\Mvc\View\Engine\Volt($this->view, $this->di); $compiler = $volt->getCompiler(); $compiler->addFunction('shuffle', 'md5'); } else { die('invaild error'); } }
private static function cgiRegister() { $di = get_app_di(); $config = self::getConfig(); self::registCommonService($di, $config); $di->setShared('router', function () { $router = new \Phalcon\Mvc\Router(); $router->removeExtraSlashes(true); $router->add('/:controller/:action/:params', array('controller' => 1, 'action' => 2, 'params' => 3)); return $router; }); $di->setShared('dispatcher', function () { $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach('dispatch:beforeException', new NotFoundPlugin()); $dispatcher = new \Phalcon\Mvc\Dispatcher(); $dispatcher->setEventsManager($eventsManager); $dispatcher->setDefaultNamespace("App\\Controllers\\"); return $dispatcher; }); $di->setShared('view', function () use($config) { $view = new \Phalcon\Mvc\View(); $view->setViewsDir($config->view->templatePath); $view->registerEngines(array('.html' => function ($view, $di) { $config = $di->get('config'); $compiledPath = $config->view->compiledPath; if (!file_exists($compiledPath)) { mkdir($compiledPath, 0744, true); } $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di); $volt->setOptions(array('compiledPath' => $compiledPath, 'compiledExtension' => $config->view->compiledExtension, 'compileAlways' => isset($config->view->compileAlways) ?: false)); $compiler = $volt->getCompiler(); $compiler->addExtension(new VoltExtension()); $autoEscape = isset($config->view->autoEscape) ?: true; ClassUtil::modifyPrivateProperties($compiler, array('_autoescape' => $autoEscape)); return $volt; })); return $view; }); $di->setShared('elements', function () { return new ElementsPlugin(); }); }
/** * Generate a new View object with preset parameters. * * @param array $options * @param \Phalcon\DiInterface $di * @return \Phalcon\Mvc\View */ public static function getView($options = array(), \Phalcon\DiInterface $di = null) { if ($di == null) { $di = \Phalcon\Di::getDefault(); } $defaults = array('base_dir' => DF_INCLUDE_BASE . '/', 'views_dir' => 'modules/frontend/views/scripts/', 'partials_dir' => '', 'layouts_dir' => '../../../../templates/', 'layout' => 'main'); $options = array_merge($defaults, (array) $options); $view = new \Phalcon\Mvc\View(); $view->setDI($di); $eventsManager = new \Phalcon\Events\Manager(); $view->setEventsManager($eventsManager); // Base directory from which all views load. $view->setBasePath($options['base_dir']); $view->setViewsDir($options['views_dir']); // Relative path of main templates. $view->setLayoutsDir($options['layouts_dir']); $view->setTemplateAfter($options['layout']); // Use present directory for partials by default. $view->setPartialsDir($options['partials_dir']); // Register template engines. $view->registerEngines(array(".phtml" => 'Phalcon\\Mvc\\View\\Engine\\Php', ".volt" => function ($view, $di) { $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di); $volt->setOptions(array('compiledPath' => function ($templatePath) { $find_replace = array(DF_INCLUDE_BASE => '', '/modules/' => '', '/views/scripts/' => '_', '/' => '_'); $templatePath = str_replace(array_keys($find_replace), array_values($find_replace), $templatePath); return DF_INCLUDE_CACHE . '/volt_' . $templatePath . '.compiled.php'; })); $compiler = $volt->getCompiler(); $compiler->addFunction('helper', function ($resolvedArgs, $exprArgs) use($di) { return '$this->viewHelper->handle(' . $resolvedArgs . ')'; }); return $volt; })); // Register global escaper. $view->setVar('e', new \Phalcon\Escaper()); return $view; }
session_set_cookie_params($config->app->session_lifetime); if ($config->app->debug != 1) { ini_set('session.cookie_secure', '1'); ini_set('session.cookie_httponly', '1'); } $session = new Phalcon\Session\Adapter\Files(); $session->start(); return $session; }); $di->setShared('view', function () use($config) { $view = new Phalcon\Mvc\View\Simple(); $view->setViewsDir(ROOTDIR . '/app/views/'); $view->registerEngines(array('.phtml' => function ($view) use($config) { $volt = new Phalcon\Mvc\View\Engine\Volt($view); $volt->setOptions(array('compiledPath' => ROOTDIR . '/tmp/volt/', 'compiledExtension' => '.php', 'compiledSeparator' => '_', 'compileAlways' => true)); $compiler = $volt->getCompiler(); $compiler->addFunction('recaptcha_get_html', function () use($config) { return "'" . recaptcha_get_html($config->captcha->pub, null, true) . "'"; }); return $volt; })); return $view; }); $di->setShared('db', function () use($config) { $db = new \Phalcon\Db\Adapter\Pdo\Mysql($config->db->toArray()); $db->execute('SET NAMES UTF8', array()); return $db; }); $di->setShared('modelsMetadata', function () use($config) { if ($config->app->cache_apc) { $metaData = new Phalcon\Mvc\Model\MetaData\Apc(array("lifetime" => 3600, "prefix" => $config->app->suffix . "-meta-db-main"));
/** * Register the Volt engines * * @package las * @version 1.0 * * @param object $view Phalcon\Mvc\View * @param object $di dependency Injection * * @return array array of template engines */ public static function registerEngines($view, $di) { $config = \Phalcon\DI::getDefault()->getShared('config'); $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di); $volt->setOptions(array('stat' => $config->app->env == 'production' ? false : true, 'compileAlways' => $config->app->env == 'development' ? true : false, 'compiledPath' => function ($templatePath) { list($junk, $path) = explode(ROOT_PATH, $templatePath); $dir = dirname($path); $file = basename($path, '.volt'); if (!is_dir(ROOT_PATH . '/app/common/cache/volt' . $dir)) { $old = umask(0); mkdir(ROOT_PATH . '/app/common/cache/volt' . $dir, 0777, true); umask($old); } return ROOT_PATH . '/app/common/cache/volt' . $dir . '/' . $file . '.phtml'; })); $compiler = $volt->getCompiler(); $compiler->addExtension(new \Las\Extension\VoltStaticFunctions()); $compiler->addExtension(new \Las\Extension\VoltPHPFunctions()); return array(".phtml" => "Phalcon\\Mvc\\View\\Engine\\Php", ".volt" => $volt, ".md" => 'Las\\Extension\\Markdown'); }
$di->setShared('url', function () use($di) { $url = new \ApiDocs\Components\Url(); $url->setBaseUri('/api/'); return $url; }); $di->setShared('tag', function () { return new \ApiDocs\Components\Tag(); }); $di->setShared('view', function () use($di) { $view = new Phalcon\Mvc\View(); $view->setViewsDir(APP_ROOT . '/views/'); $view->registerEngines(array('.phtml' => 'Phalcon\\Mvc\\View\\Engine\\Php', '.volt' => function ($view, $di) { $config = $di->get('config'); $volt = new Phalcon\Mvc\View\Engine\Volt($view, $di); $volt->setOptions((array) $config->voltOptions); $volt->getCompiler()->addFunction('tr', function ($key) { return "translate({$key})"; }); return $volt; })); return $view; }); $di->setShared('db', function () use($di) { $connection = new DbAdapter((array) $di->get('config')->db); return $connection; }); $di->setShared('dispatcher', function () use($di) { $eventsManager = $di->get('eventsManager'); $eventsManager->attach('dispatch', function ($event, $dispatcher, $exception) use($di) { if ($event->getType() == 'beforeException') { switch ($exception->getCode()) {
/** * Register the Volt engines * * * @param object $view Phalcon\Mvc\View * @param object $di dependency Injection * * @return array array of template engines */ public static function registerEngines($view, $di) { $config = \Phalcon\DI::getDefault()->getShared('config'); $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di); $volt->setOptions(array('stat' => $config->app->env == 'production' ? false : true, 'compileAlways' => $config->app->env == 'development' ? true : false, 'compiledPath' => function ($templatePath) { //@TODO investigate the strange anomaly I got with multi sites across domains trying to render each others views! list($junk, $path) = explode(APP_PATH, $templatePath); // print_r($path);exit; $dir = dirname($path); $file = basename($path, '.volt'); if (!is_dir(APP_PATH . '/app/common/cache/volt' . $dir)) { $old = umask(0); mkdir(APP_PATH . '/app/common/cache/volt' . $dir, 0777, true); umask($old); } return APP_PATH . '/app/common/cache/volt' . $dir . '/' . $file . '.phtml'; })); $compiler = $volt->getCompiler(); $compiler->addExtension(new \Baseapp\Extension\VoltStaticFunctions()); $compiler->addExtension(new \Baseapp\Extension\VoltPHPFunctions()); // make Recaptcha function available in volt $compiler->addFunction('recaptcha', function ($resolvedArgs, $exprArgs) { return 'Baseapp\\Library\\Recaptcha::recaptcha(' . $resolvedArgs . ')'; }); // make all Helper class functions available in volt $helperClass = new \Baseapp\Library\Helper(); $helpers = get_class_methods($helperClass); foreach ($helpers as $helper) { $compiler->addFunction($helper, function ($resolvedArgs, $exprArgs) use($helper) { return 'Baseapp\\Library\\Helper::' . $helper . '(' . $resolvedArgs . ')'; }); } // make all time class functions avaiilable in volt $timeClass = new \Baseapp\Library\Time(); $timeFuncs = get_class_methods($timeClass); foreach ($timeFuncs as $time) { $compiler->addFunction($time, function ($resolvedArgs, $exprArgs) use($time) { return 'Baseapp\\Library\\Time::' . $time . '(' . $resolvedArgs . ')'; }); } // make all utility class functions available in volt $utilityClass = new \Baseapp\Library\Utility(); $utilityFuncs = get_class_methods($utilityClass); foreach ($utilityFuncs as $utility) { $compiler->addFunction($utility, function ($resolvedArgs, $exprArgs) use($utility) { return 'Baseapp\\Library\\Utility::' . $utility . '(' . $resolvedArgs . ')'; }); } return array(".phtml" => "Phalcon\\Mvc\\View\\Engine\\Php", ".volt" => $volt, ".md" => 'Baseapp\\Extension\\Markdown'); }
//安全组件 $di->set('security', function () { $security = new \Phalcon\Security(); $security->setWorkFactor(12); return $security; }, true); //volt组件 $di->set('volt', function ($view, $di) use($config) { $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di); $volt->setOptions(['compiledPath' => function ($templatePath) use($config) { //$dirName = str_replace('\\', '_', str_replace('/', '_', dirname(trim($templatePath, APP_PATH)))); $dirName = str_replace('\\', '_', str_replace('/', '_', dirname(str_replace(FRONTEND_PUBLIC_PATH . 'views/default/', '', $templatePath)))); return $config->application->voltDir . '/' . $dirName . '_' . basename($templatePath) . '.php'; }, 'compiledExtension' => '.php', 'compiledSeparator' => '_', 'compileAlways' => $config->application->debug]); //设置可以调用所有方法 $volt->getCompiler()->addExtension(new \ST\Common\Functions\STFunctionExtension()); $compiler = $volt->getCompiler(); //注册一些常用的方法(一般都是内置的方法) $compiler->addFunction('replace', 'str_replace'); $compiler->addFilter('int', function ($resolvedArgs, $exprArgs) { return 'intval(' . $resolvedArgs . ')'; }); $compiler->addFilter('merge', 'array_merge'); return $volt; }); //闪存配置 $di->set('flash', function () { $flash = new \Phalcon\Flash\Session(['error' => 'alert alert-danger', 'success' => 'alert alert-success', 'notice' => 'alert alert-info']); return $flash; }); //系统日志