/** * Decamelize string * * @param string $value * @param string $separator default: "-" * * @return string */ public static function decamelize($value, $separator = null) { static $filter = null; if (null === $filter) { $filter = new Word\CamelCaseToSeparator(); } $filtered = $filter->setSeparator($separator ?: self::DEFAULT_SEPARATOR)->filter($value); return mb_strtolower($filtered, self::DEFAULT_ENCODING); }
/** * List all modules * * @return \Zend\View\Model\ViewModel */ public function indexAction() { $collection = new ModuleCollection(); $filter = new Filter\Word\CamelCaseToSeparator(); $filter->setSeparator('-'); $filterChain = new Filter\FilterChain(); $filterChain->attach($filter)->attach(new Filter\StringToLower()); foreach ($collection->getModules() as $module) { $module->setData('route', $filterChain->filter($module->getName())); } return array('modules' => $collection->getModules()); }
/** * Load menu if module has view with name "menu.phtml" * * @param EventInterface $event Event * * @return void */ public function loadMenu(EventInterface $event) { if ($route = $event->getRouter()->getRoute('module')->match($event->getRequest())) { if ($route->getParam('module') === 'module') { return; } $filter = new Filter\Word\CamelCaseToSeparator(); $filter->setSeparator('-'); $filterChain = new Filter\FilterChain(); $filterChain->attach($filter)->attach(new Filter\StringToLower()); $template = $filterChain->filter($route->getParam('module')) . '/menu'; $target = $event->getTarget(); $resolver = $event->getApplication()->getServiceManager()->get('Zend\\View\\Resolver\\TemplatePathStack'); $navigation = $target->getServiceLocator()->get('navigation'); $navigation->findByRoute('module')->addPage(array('label' => $route->getParam('module'), 'route' => $event->getRouteMatch()->getMatchedRouteName(), 'active' => true)); if (false !== $resolver->resolve($template)) { $target->layout()->setVariable('moduleMenu', $template); } } }