/** * Retrieves the view renderer object * * @return Zend_Controller_Action_Helper_ViewRenderer|null * @throws Glitch_Application_Resource_Exception */ public function getViewRenderer() { if (null === $this->_viewRenderer) { // Pull in the front controller; bootstrap first if necessary $this->_bootstrap->bootstrap('FrontController'); $front = $this->_bootstrap->getResource('FrontController'); // Ignore if no view renderer is to be used if ($front->getParam('noViewRenderer')) { return null; } // Get existing renderer, if any, or create a new one $this->_viewRenderer = Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer') ? Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer') : new $this->_className(null, $this->getOptions()); // Dynamic class loading; perform sanity check if (!$this->_viewRenderer instanceof Zend_Controller_Action_Helper_ViewRenderer) { throw new Glitch_Application_Resource_Exception('Class is not a valid view renderer instance'); } // Register the view as the default view for handling view scripts $this->_bootstrap->bootstrap('View'); $view = $this->_bootstrap->getResource('View'); $this->_viewRenderer->setView($view); // It is paramount to set this base path spec: ZF otherwise uses its own // spec, causing it to create a path to a conventional ZF-style directory $this->_viewRenderer->setViewBasePathSpec(':module/' . Glitch_View::PATH_VIEW); // Set empty inflector settings: all path translations are handled by the custom dispatcher $inflector = new Zend_Filter_Inflector(); $inflector->addRules(array(':module' => array(), ':controller' => array(), ':action' => array())); $this->_viewRenderer->setInflector($inflector, true); if (!Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer')) { Zend_Controller_Action_HelperBroker::addHelper($this->_viewRenderer); } } return $this->_viewRenderer; }
/** * @see ZF-2443 */ public function testStockInflectorWorksWithViewBaseSpec() { $this->request->setModuleName('bar')->setControllerName('index')->setActionName('admin'); $controller = new Bar_IndexController($this->request, $this->response, array()); $this->helper->setActionController($controller); $this->helper->setViewBasePathSpec(':moduleDir/:module'); $this->helper->initView(); $viewScriptPaths = $this->helper->view->getAllPaths(); $expectedPathRegex = '#modules/bar/bar/scripts/$#'; $this->assertRegExp($expectedPathRegex, $this->_normalizePath($viewScriptPaths['script'][0])); $this->assertEquals($this->helper->getViewScript(), 'index/admin.phtml'); }
/** * ブートストラップ * * @return void */ protected function _initView() { /* * Zend_Controller_Action_Helper_ViewRendererオブジェクトに * Zend_View_Smartyクラスを登録 */ $view = new Zend_View_Smarty(TEMPLATES_PATH, array('compile_dir' => SMARTY_COMPILE_PATH, 'cache_dir' => SMARTY_CACHE_PATH)); $render = new Zend_Controller_Action_Helper_ViewRenderer($view); $render->setViewBasePathSpec(':moduleDir' . ABSOLUTE_VIEWS_TEMPLATE_PATH)->setViewSuffix('tpl'); // ヘルパーブローカにViewRendererヘルパーを登録 Zend_Controller_Action_HelperBroker::addHelper($render); }
/** * @see ZF-2443 */ public function testStockInflectorWorksWithViewBaseSpec() { $this->request->setModuleName('bar')->setControllerName('index')->setActionName('admin'); $controller = new Bar_IndexController($this->request, $this->response, array()); $this->helper->setActionController($controller); $this->helper->setViewBasePathSpec(':moduleDir/:module'); $this->helper->initView(); $viewScriptPaths = $this->helper->view->getAllPaths(); // we need this until View decides to not use DIRECTORY_SEPARATOR $expectedPathRegex = DIRECTORY_SEPARATOR == '\\' ? '#modules\\\\bar\\\\bar\\\\scripts\\\\$#' : '#modules/bar/bar/scripts/$#'; $this->assertRegExp($expectedPathRegex, $viewScriptPaths['script'][0]); $this->assertEquals($this->helper->getViewScript(), 'index/admin.phtml'); }
/** * @issue ZF-2443 */ public function testStockInflectorWorksWithViewBaseSpec() { $this->request->setModuleName('bar') // bar must exist so the ViewRendere doesnt throw an exception ->setControllerName('index') ->setActionName('admin'); $controller = new Bar_IndexController($this->request, $this->response, array()); $this->helper->setActionController($controller); $this->helper->setView($view = new Zend_View()); $this->helper->setViewBasePathSpec(':moduleDir/:module'); $this->helper->initView(); $viewScriptPaths = $view->getAllPaths(); $this->assertRegExp('#modules/bar/bar/scripts/$#', $viewScriptPaths['script'][0]); $this->assertEquals($this->helper->getViewScript(), 'index/admin.phtml'); }
/** * @group ZF-2443 */ public function testStockInflectorWorksWithViewBaseSpec() { $this->request->setModuleName('bar') // bar must exist so the ViewRendere doesnt throw an exception ->setControllerName('index') ->setActionName('admin'); $controller = new \Bar\IndexController($this->request, $this->response, array()); $controller->setHelperBroker($this->broker); $this->helper->setActionController($controller); $this->helper->setViewBasePathSpec(':moduleDir/:module'); $this->helper->initView(); $viewScriptPaths = $this->helper->view->resolver()->getPaths(); $expectedPathRegex = '#modules/bar/bar/scripts/$#'; $this->assertRegExp( $expectedPathRegex, $this->_normalizePath($viewScriptPaths[0]) ); $this->assertEquals($this->helper->getViewScript(), 'index/admin.phtml'); }
/** * * @return App_View_Smarty */ public function init() { $options = $this->getOptions(); //-------------------------------------------- // API処理は除外する $uri = $_SERVER['REQUEST_URI']; if (preg_match('@rest/@i', $uri)) { return; } //-------------------------------------------- // Pager Zend_Paginator::setDefaultScrollingStyle('Sliding'); // View $view = new App_View_Smarty(null, $options); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); $viewRenderer->setView($view); $templateFileName = ''; // helper $viewRenderer->setViewBasePathSpec(realpath($options['template_dir']))->setViewScriptPathSpec(':controller/' . $templateFileName . ':action.:suffix')->setViewScriptPathNoControllerSpec($templateFileName . ':action.:suffix')->setViewSuffix($options['suffix']); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); return $view; }
/** * Initialize the paths, the config values and all the render stuff. * * @return void */ public function _initialize() { // Report all PHP errors error_reporting(-1); define('PHPR_CORE_PATH', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'application'); define('PHPR_LIBRARY_PATH', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'library'); if (!defined('PHPR_CONFIG_FILE')) { define('PHPR_CONFIG_FILE', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'configuration.php'); } set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . get_include_path()); require_once 'Zend/Loader/Autoloader.php'; require_once 'Phprojekt/Loader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader(array('Phprojekt_Loader', 'autoload')); // Read the config file, but only the production setting try { $this->_config = new Zend_Config_Ini(PHPR_CONFIG_FILE, PHPR_CONFIG_SECTION, true); } catch (Zend_Config_Exception $error) { $response = new Zend_Controller_Request_Http(); $webPath = $response->getScheme() . '://' . $response->getHttpHost() . $response->getBasePath() . '/'; header("Location: " . $webPath . "setup.php"); die('You need the file configuration.php to continue. Have you tried the <a href="' . $webPath . 'setup.php">setup</a> routine?' . "\n" . '<br />Original error: ' . $error->getMessage()); } // Set webpath, tmpPath and applicationPath if (empty($this->_config->webpath)) { $response = new Zend_Controller_Request_Http(); $this->_config->webpath = $response->getScheme() . '://' . $response->getHttpHost() . $response->getBasePath() . '/'; } define('PHPR_ROOT_WEB_PATH', $this->_config->webpath . 'index.php/'); define('PHPR_TEMP_PATH', $this->_config->tmpPath); define('PHPR_USER_CORE_PATH', $this->_config->applicationPath); set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . PHPR_CORE_PATH . PATH_SEPARATOR . PHPR_USER_CORE_PATH . PATH_SEPARATOR . get_include_path()); // Set the timezone to UTC date_default_timezone_set('UTC'); // Start zend session to handle all session stuff try { Zend_Session::start(); } catch (Zend_Session_Exception $error) { Zend_Session::writeClose(); Zend_Session::start(); Zend_Session::regenerateId(); error_log($error); } // Set a metadata cache and clean it $frontendOptions = array('automatic_serialization' => true); $backendOptions = array('cache_dir' => PHPR_TEMP_PATH . 'zendCache' . DIRECTORY_SEPARATOR); try { $this->_cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); } catch (Exception $error) { die("The directory " . PHPR_TEMP_PATH . "zendCache do not exists or not have write access."); } Zend_Db_Table_Abstract::setDefaultMetadataCache($this->_cache); // Use for Debug only //Zend_Db_Table_Abstract::getDefaultMetadataCache()->clean(); // Check Logs $this->getLog(); $missingRequirements = array(); // The following extensions are either needed by components of the Zend Framework that are used // or by P6 components itself. $extensionsNeeded = array('mbstring', 'iconv', 'ctype', 'gd', 'pcre', 'pdo', 'Reflection', 'session', 'SPL', 'zlib'); // These settings need to be properly configured by the admin $settingsNeeded = array('magic_quotes_gpc' => 0, 'magic_quotes_runtime' => 0, 'magic_quotes_sybase' => 0); // Check the PHP version $requiredPhpVersion = "5.2.4"; if (version_compare(phpversion(), $requiredPhpVersion, '<')) { // This is a requirement of the Zend Framework $missingRequirements[] = "- PHP Version '" . $requiredPhpVersion . "' or newer"; } foreach ($extensionsNeeded as $extension) { if (!extension_loaded($extension)) { $missingRequirements[] = "- The '" . $extension . "' extension must be enabled."; } } // Check pdo library $mysql = extension_loaded('pdo_mysql'); $sqlite = extension_loaded('pdo_sqlite2'); $pgsql = extension_loaded('pdo_pgsql'); if (!$mysql && !$sqlite && !$pgsql) { $missingRequirements[] = "- You need one of these PDO extensions: pdo_mysql, pdo_pgsql or pdo_sqlite"; } foreach ($settingsNeeded as $conf => $value) { if (ini_get($conf) != $value) { $missingRequirements[] = "- The php.ini setting of '" . $conf . "' has to be '" . $value . "'."; } } if (!empty($missingRequirements)) { $message = "Your PHP does not meet the requirements needed for P6.<br />" . implode("<br />", $missingRequirements); die($message); } $helperPaths = $this->_getHelperPaths(); $view = $this->_setView($helperPaths); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view); $viewRenderer->setViewBasePathSpec(':moduleDir/Views'); $viewRenderer->setViewScriptPathSpec(':action.:suffix'); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); foreach ($helperPaths as $helperPath) { Zend_Controller_Action_HelperBroker::addPath($helperPath['directory']); } $plugin = new Zend_Controller_Plugin_ErrorHandler(); $plugin->setErrorHandlerModule('Default'); $plugin->setErrorHandlerController('Error'); $plugin->setErrorHandlerAction('error'); $front = Zend_Controller_Front::getInstance(); $front->setDispatcher(new Phprojekt_Dispatcher()); $front->registerPlugin($plugin); $front->setDefaultModule('Default'); $front->setModuleControllerDirectoryName('Controllers'); $front->addModuleDirectory(PHPR_CORE_PATH); $front->addModuleDirectory(PHPR_USER_CORE_PATH); // Add SubModules directories with controlles $moduleDirectories = $this->_getControllersFolders($helperPaths); foreach ($moduleDirectories as $moduleDirectory) { $front->addModuleDirectory($moduleDirectory); } $front->setParam('useDefaultControllerAlways', true); // Define general error handler set_error_handler(array("Phprojekt", "errorHandler")); }
/** * Init the front for test it */ public function __construct() { $this->request = new Zend_Controller_Request_Http(); $this->response = new Zend_Controller_Response_Http(); $this->config = Phprojekt::getInstance()->getConfig(); $this->config->language = "en"; $this->request->setModuleName('Default'); $this->request->setActionName('index'); // Languages Set Zend_Loader::loadClass('Phprojekt_Language', PHPR_LIBRARY_PATH); $cache = Phprojekt::getInstance()->getCache(); if (!($translate = $cache->load('Phprojekt_getTranslate_en'))) { $translate = new Phprojekt_Language('en'); $cache->save($translate, 'Phprojekt_getTranslate_en', array('Language')); } Zend_Registry::set('translate', $translate); $view = new Zend_View(); $view->addScriptPath(PHPR_CORE_PATH . '/Default/Views/dojo/'); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view); $viewRenderer->setViewBasePathSpec(':moduleDir/Views'); $viewRenderer->setViewScriptPathSpec(':action.:suffix'); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); /* Front controller stuff */ $this->front = Zend_Controller_Front::getInstance(); $this->front->setDispatcher(new Phprojekt_Dispatcher()); $this->front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler()); $this->front->setDefaultModule('Default'); $moduleDirectories = array(); foreach (scandir(PHPR_CORE_PATH) as $module) { $dir = PHPR_CORE_PATH . DIRECTORY_SEPARATOR . $module; if (is_dir(!$dir)) { continue; } $helperPath = $dir . DIRECTORY_SEPARATOR . 'Helpers'; if (is_dir($helperPath)) { $view->addHelperPath($helperPath, $module . '_' . 'Helpers'); Zend_Controller_Action_HelperBroker::addPath($helperPath); } $dir = PHPR_CORE_PATH . DIRECTORY_SEPARATOR . $module . DIRECTORY_SEPARATOR . 'SubModules'; if (is_dir($dir)) { if ($module != 'Core') { $moduleDirectories[] = $dir; } else { $coreModules = scandir($dir); foreach ($coreModules as $coreModule) { $coreDir = $dir . DIRECTORY_SEPARATOR . $coreModule; if ($coreModule != '.' && $coreModule != '..' && $coreModule != '.svn' && is_dir($coreDir)) { $moduleDirectories[] = $coreDir; } } } } } Zend_Registry::set('view', $view); $view->webPath = $this->config->webpath; $this->front->setModuleControllerDirectoryName('Controllers'); $this->front->addModuleDirectory(PHPR_CORE_PATH); foreach ($moduleDirectories as $moduleDirectory) { $this->front->addModuleDirectory($moduleDirectory); } $this->front->setParam('useDefaultControllerAlways', true); $this->front->throwExceptions(true); }
public function testSettingViewBasePathSpec() { $this->helper->setViewBasePathSpec(':moduleDir/views/:controller'); $this->assertEquals(':moduleDir/views/:controller', $this->helper->getViewBasePathSpec()); }
set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . PHPR_CORE_PATH . PATH_SEPARATOR . get_include_path()); require_once 'Zend/Loader/Autoloader.php'; require_once 'Phprojekt/Loader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader(array('Phprojekt_Loader', 'autoload')); Phprojekt_Loader::addIncludeDirectory(realpath(PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'application')); ini_set('max_execution_time', 0); error_reporting(-1); // Set the timezone to UTC date_default_timezone_set('UTC'); // Start zend session to handle all session stuff Zend_Session::start(); $view = new Zend_View(); $view->addScriptPath(PHPR_CORE_PATH . '/Setup/Views/dojo/'); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view); $viewRenderer->setViewBasePathSpec(':moduleDir/Views'); $viewRenderer->setViewScriptPathSpec(':action.:suffix'); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); $plugin = new Zend_Controller_Plugin_ErrorHandler(); $plugin->setErrorHandlerModule('Setup'); $plugin->setErrorHandlerController('Error'); $plugin->setErrorHandlerAction('error'); $front = Zend_Controller_Front::getInstance(); $front->setDispatcher(new Phprojekt_Dispatcher()); $front->registerPlugin($plugin); $front->setDefaultModule('Setup'); $front->setModuleControllerDirectoryName('Controllers'); $front->addModuleDirectory(PHPR_CORE_PATH); $front->setParam('useDefaultControllerAlways', true); try { Zend_Controller_Front::getInstance()->dispatch();
/** * Initialize the paths, the config values and all the render stuff. * * @return void */ public function _initialize() { // Report all PHP errors error_reporting(-1); define('PHPR_CORE_PATH', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'application'); define('PHPR_LIBRARY_PATH', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'library'); if (!defined('PHPR_CONFIG_FILE')) { define('PHPR_CONFIG_FILE', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'configuration.php'); } set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . get_include_path()); require_once 'Zend/Loader/Autoloader.php'; require_once 'Phprojekt/Loader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader(array('Phprojekt_Loader', 'autoload')); // Read the config file, but only the production setting try { $this->_config = new Zend_Config_Ini(PHPR_CONFIG_FILE, PHPR_CONFIG_SECTION, true); } catch (Zend_Config_Exception $error) { $response = new Zend_Controller_Request_Http(); $webPath = $response->getScheme() . '://' . $response->getHttpHost() . $response->getBasePath() . '/'; header("Location: " . $webPath . "setup.php"); die('You need the file configuration.php to continue. Have you tried the <a href="' . $webPath . 'setup.php">setup</a> routine?' . "\n" . '<br />Original error: ' . $error->getMessage()); } // Set webpath, tmpPath and applicationPath if (empty($this->_config->webpath)) { $response = new Zend_Controller_Request_Http(); $this->_config->webpath = $response->getScheme() . '://' . $response->getHttpHost() . $response->getBasePath() . '/'; } define('PHPR_ROOT_WEB_PATH', $this->_config->webpath . 'index.php/'); define('PHPR_TEMP_PATH', $this->_config->tmpPath); define('PHPR_USER_CORE_PATH', $this->_config->applicationPath); set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . PHPR_CORE_PATH . PATH_SEPARATOR . PHPR_USER_CORE_PATH . PATH_SEPARATOR . get_include_path()); // Set the timezone to UTC date_default_timezone_set('UTC'); // Start zend session to handle all session stuff try { Zend_Session::start(); } catch (Zend_Session_Exception $error) { Zend_Session::writeClose(); Zend_Session::start(); Zend_Session::regenerateId(); error_log($error); } // Set a metadata cache and clean it $frontendOptions = array('automatic_serialization' => true); $backendOptions = array('cache_dir' => PHPR_TEMP_PATH . 'zendCache' . DIRECTORY_SEPARATOR); try { $this->_cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); } catch (Exception $error) { die("The directory " . PHPR_TEMP_PATH . "zendCache do not exists or not have write access."); } Zend_Db_Table_Abstract::setDefaultMetadataCache($this->_cache); // Use for Debug only //Zend_Db_Table_Abstract::getDefaultMetadataCache()->clean(); // Check Logs $this->getLog(); // Check the server $checkServer = Phprojekt::checkExtensionsAndSettings(); // Check the PHP version if (!$checkServer['requirements']['php']['checked']) { $missingRequirements[] = "- You need the PHP Version '" . $checkServer['requirements']['php']['required'] . "' or newer"; } // Check required extension foreach ($checkServer['requirements']['extension'] as $name => $values) { if (!$values['checked']) { $missingRequirements[] = "- The '" . $name . "' extension must be enabled."; } } // Check required settings foreach ($checkServer['requirements']['settings'] as $name => $values) { if (!$values['checked']) { $missingRequirements[] = "- The php.ini setting of '" . $name . "' has to be '" . $values['required'] . "'."; } } // Show message if (!empty($missingRequirements)) { $message = "Your PHP does not meet the requirements needed for P6.<br />" . implode("<br />", $missingRequirements); die($message); } $helperPaths = $this->_getHelperPaths(); $view = $this->_setView($helperPaths); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view); $viewRenderer->setViewBasePathSpec(':moduleDir/Views'); $viewRenderer->setViewScriptPathSpec(':action.:suffix'); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); foreach ($helperPaths as $helperPath) { Zend_Controller_Action_HelperBroker::addPath($helperPath['directory']); } $plugin = new Zend_Controller_Plugin_ErrorHandler(); $plugin->setErrorHandlerModule('Default'); $plugin->setErrorHandlerController('Error'); $plugin->setErrorHandlerAction('error'); $front = Zend_Controller_Front::getInstance(); $front->setDispatcher(new Phprojekt_Dispatcher()); $front->registerPlugin($plugin); $front->setDefaultModule('Default'); $front->setModuleControllerDirectoryName('Controllers'); $front->addModuleDirectory(PHPR_CORE_PATH); $front->addModuleDirectory(PHPR_USER_CORE_PATH); // Add SubModules directories with controlles $moduleDirectories = $this->_getControllersFolders($helperPaths); foreach ($moduleDirectories as $moduleDirectory) { $front->addModuleDirectory($moduleDirectory); } $front->setParam('useDefaultControllerAlways', true); // Define general error handler set_error_handler(array("Phprojekt", "errorHandler")); }