/** * Loads helpers, with their dependencies. * * @param array $loaded List of helpers that are already loaded. * @param array $helpers List of helpers to load. * @return array * @access protected */ function &_loadHelpers(&$loaded, $helpers) { static $tags; $helpers[] = 'Session'; if (empty($tags)) { $helperTags = new Helper(); $tags = $helperTags->loadConfig(); } foreach ($helpers as $helper) { $parts = preg_split('/\\/|\\./', $helper); if (count($parts) === 1) { $plugin = $this->plugin; } else { $plugin = Inflector::underscore($parts['0']); $helper = $parts[count($parts) - 1]; } $helperCn = $helper . 'Helper'; if (in_array($helper, array_keys($loaded)) !== true) { if (!class_exists($helperCn)) { if (is_null($plugin) || !loadPluginHelper($plugin, $helper)) { if (!loadHelper($helper)) { $this->cakeError('missingHelperFile', array(array('helper' => $helper, 'file' => Inflector::underscore($helper) . '.php', 'base' => $this->base))); exit; } } if (!class_exists($helperCn)) { $this->cakeError('missingHelperClass', array(array('helper' => $helper, 'file' => Inflector::underscore($helper) . '.php', 'base' => $this->base))); exit; } } $camelBackedHelper = Inflector::variable($helper); ${$camelBackedHelper} =& new $helperCn(); ${$camelBackedHelper}->view =& $this; ${$camelBackedHelper}->tags = $tags; $vars = array('base', 'webroot', 'here', 'params', 'action', 'data', 'themeWeb', 'plugin'); $c = count($vars); for ($j = 0; $j < $c; $j++) { ${$camelBackedHelper}->{$vars[$j]} = $this->{$vars[$j]}; } if (!empty($this->validationErrors)) { ${$camelBackedHelper}->validationErrors = $this->validationErrors; } $loaded[$helper] =& ${$camelBackedHelper}; if (isset(${$camelBackedHelper}->helpers) && is_array(${$camelBackedHelper}->helpers)) { $loaded =& $this->_loadHelpers($loaded, ${$camelBackedHelper}->helpers); } } } return $loaded; }
/** * Load dependencies for given element (controller/component/helper) * * @param string $element Element to load dependency for * @access private */ function __loadDependencies($element) { switch (low($element)) { case 'behavior': loadModel(null); loadBehavior(null); break; case 'controller': loadController(null); break; case 'component': loadComponent(null); break; case 'helper': uses('view' . DS . 'helper'); loadHelper(null); break; case 'model': loadModel(null); break; } }
/** * Loads a plugin's helper * * @param string $plugin Name of plugin * @param string $helper Name of helper to load * @return boolean Success * @deprecated */ function loadPluginHelper($plugin, $helper) { loadHelper(null); if (!class_exists($helper . 'Helper')) { $helper = Inflector::underscore($helper); $file = APP . 'plugins' . DS . $plugin . DS . 'views' . DS . 'helpers' . DS . $helper . '.php'; if (file_exists($file)) { require $file; return true; } else { return false; } } return true; }