* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /** * @package symfony * @subpackage config * @author Fabien Potencier * @version SVN: $Id: sfRoutingConfigHandler.class.php 24962 2009-12-04 20:39:41Z FabianLange $ */ class sfRoutingConfigHandler extends sfYamlConfigHandler { /** * Executes this configuration handler. * * @param array $configFiles An array of absolute filesystem path to a configuration file * * @return string Data to be written to a cache file * * @throws sfConfigurationException If a requested configuration file does not exist or is not readable * @throws sfParseException If a requested configuration file is improperly formatted */ public function execute($configFiles) { $options = $this->getOptions(); unset($options['cache']); $data = array(); foreach ($this->parse($configFiles) as $name => $routeConfig) { $r = new ReflectionClass($routeConfig[0]); $route = $r->newInstanceArgs($routeConfig[1]); $routes = $route instanceof sfRouteCollection ? $route : array($name => $route); foreach (sfPatternRouting::flattenRoutes($routes) as $name => $route) { $route->setDefaultOptions($options); $data[] = sprintf('$this->routes[\'%s\'] = unserialize(%s);', $name, var_export(serialize($route), true)); } } return sprintf("getConfiguration()->getConfigPaths('config/factories.yml')); return $config['routing']['param']; } public function evaluate($configFiles) { $routeDefinitions = $this->parse($configFiles); $routes = array(); foreach ($routeDefinitions as $name => $route) { $r = new ReflectionClass($route[0]); $routes[$name] = $r->newInstanceArgs($route[1]); } return $routes; } protected function parse($configFiles) { // parse the yaml $config = self::getConfiguration($configFiles); // collect routes $routes = array(); foreach ($config as $name => $params) { if ( (isset($params['type']) && 'collection' == $params['type']) || (isset($params['class']) && false !== strpos($params['class'], 'Collection')) ) { $options = isset($params['options']) ? $params['options'] : array(); $options['name'] = $name; $options['requirements'] = isset($params['requirements']) ? $params['requirements'] : array(); $routes[$name] = array(isset($params['class']) ? $params['class'] : 'sfRouteCollection', array($options)); } else { $routes[$name] = array(isset($params['class']) ? $params['class'] : 'sfRoute', array( $params['url'] ? $params['url'] : '/', isset($params['params']) ? $params['params'] : (isset($params['param']) ? $params['param'] : array()), isset($params['requirements']) ? $params['requirements'] : array(), isset($params['options']) ? $params['options'] : array(), )); } } return $routes; } /** * @see sfConfigHandler */ static public function getConfiguration(array $configFiles) { return self::parseYamls($configFiles); } }