- <?php
- /**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
-
- namespace Zend\Navigation\Service;
-
- use Zend\Config;
- use Zend\Mvc\Router\RouteMatch;
- use Zend\Mvc\Router\RouteStackInterface as Router;
- use Zend\Navigation\Exception;
- use Zend\Navigation\Navigation;
- use Zend\ServiceManager\FactoryInterface;
- use Zend\ServiceManager\ServiceLocatorInterface;
-
- /**
- * Abstract navigation factory
- */
- abstract class AbstractNavigationFactory implements FactoryInterface
- {
- /**
- * @var array
- */
- protected $pages;
-
- /**
- * @param ServiceLocatorInterface $serviceLocator
- * @return \Zend\Navigation\Navigation
- */
- public function createService(ServiceLocatorInterface $serviceLocator)
- {
- $pages = $this->getPages($serviceLocator);
- return new Navigation($pages);
- }
-
- /**
- * @abstract
- * @return string
- */
- abstract protected function getName();
-
- /**
- * @param ServiceLocatorInterface $serviceLocator
- * @return array
- * @throws \Zend\Navigation\Exception\InvalidArgumentException
- */
- protected function getPages(ServiceLocatorInterface $serviceLocator)
- {
- if (null === $this->pages) {
- $configuration = $serviceLocator->get('Config');
-
- if (!isset($configuration['navigation'])) {
- throw new Exception\InvalidArgumentException('Could not find navigation configuration key');
- }
- if (!isset($configuration['navigation'][$this->getName()])) {
- throw new Exception\InvalidArgumentException(sprintf(
- 'Failed to find a navigation container by the name "%s"',
- $this->getName()
- ));
- }
-
- $pages = $this->getPagesFromConfig($configuration['navigation'][$this->getName()]);
- $this->pages = $this->preparePages($serviceLocator, $pages);
- }
- return $this->pages;
- }
-
- /**
- * @param ServiceLocatorInterface $serviceLocator
- * @param array|\Zend\Config\Config $pages
- * @throws \Zend\Navigation\Exception\InvalidArgumentException
- */
- protected function preparePages(ServiceLocatorInterface $serviceLocator, $pages)
- {
- $application = $serviceLocator->get('Application');
- $routeMatch = $application->getMvcEvent()->getRouteMatch();
- $router = $application->getMvcEvent()->getRouter();
-
- return $this->injectComponents($pages, $routeMatch, $router);
- }
-
- /**
- * @param string|\Zend\Config\Config|array $config
- * @return array|null|\Zend\Config\Config
- * @throws \Zend\Navigation\Exception\InvalidArgumentException
- */
- protected function getPagesFromConfig($config = null)
- {
- if (is_string($config)) {
- if (file_exists($config)) {
- $config = Config\Factory::fromFile($config);
- } else {
- throw new Exception\InvalidArgumentException(sprintf(
- 'Config was a string but file "%s" does not exist',
- $config
- ));
- }
- } elseif ($config instanceof Config\Config) {
- $config = $config->toArray();
- } elseif (!is_array($config)) {
- throw new Exception\InvalidArgumentException('
- Invalid input, expected array, filename, or Zend\Config object'
- );
- }
-
- return $config;
- }
-
- /**
- * @param array $pages
- * @param RouteMatch $routeMatch
- * @param Router $router
- * @return mixed
- */
- protected function injectComponents(array $pages, RouteMatch $routeMatch = null, Router $router = null)
- {
- foreach ($pages as &$page) {
- $hasMvc = isset($page['action']) || isset($page['controller']) || isset($page['route']);
- if ($hasMvc) {
- if (!isset($page['routeMatch']) && $routeMatch) {
- $page['routeMatch'] = $routeMatch;
- }
- if (!isset($page['router'])) {
- $page['router'] = $router;
- }
- }
-
- if (isset($page['pages'])) {
- $page['pages'] = $this->injectComponents($page['pages'], $routeMatch, $router);
- }
- }
- return $pages;
- }
- }
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
9 years ago
|
|