Привет всем кодам zend. Я новичок в zend, делая код для управления страницами через БД. Я хочу использовать URL для этих страниц, как это:пользовательская маршрутизация для страниц контента в zf2
www.domainname.com/about-us
www.domainname.com/contact-us ...
Имя таблицы является ' & атрибуты cms_page»являются:
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`page_key` varchar(255) NOT NULL,
`content` longtext NOT NULL,
`added_on` datetime NOT NULL,
Я сделал R & D для этого и вот код:
// in module.config.php 'navigation' => array( 'default' => array( 'account' => array( 'label' => 'Account', 'route' => 'node', 'params' => array( 'id' => '2', ), 'pages' => array( 'home' => array( 'label' => 'Dashboard', 'route' => 'node', 'params' => array( 'id' => '1', 'link' => '/test' ), ), 'login' => array( 'label' => 'Sign In', 'route' => 'node', 'params' => array( 'id' => '5', 'link' => '/about-us' ), ), 'logout' => array( 'label' => 'Sign Out', 'route' => 'node', 'params' => array( 'id' => '3', ), ), ), ), ), ), 'router' => array( 'routes' => array( 'home' => array( 'type' => 'Zend\Mvc\Router\Http\Literal', 'options' => array( 'route' => '/', 'defaults' => array( 'controller' => 'Application\Controller\Index', 'action' => 'index', ), ), ), 'node' => array( 'type' => 'Application\Router\Alias', 'options' => array( 'route' => '/node[/:id]', 'constraints' => array( 'id' => '[0-9]+' ), 'defaults' => array( '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Index', 'action' => 'index', 'id' => '0' ), ), 'may_terminate' => true, ), ), ),
// In Module.php public function onBootstrap(MvcEvent $e) { $app = $e->getApplication(); $sm = $app->getServiceManager(); $sm->get('translator'); $sm->get('viewhelpermanager')->setFactory('controllerName', function($sm) use ($e) { $viewHelper = new View\Helper\ControllerName($e->getRouteMatch()); return $viewHelper; }); $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); $sm->setFactory('Navigation', 'Zend\Navigation\Service\DefaultNavigationFactory', true); $alias = $sm->get('Application\Router\Alias'); $nav = $sm->get('Navigation'); $alias->setNavigation($nav); } public function getServiceConfig() { return array( 'factories' => array( 'Application\Router\Alias' => function($sm) { $alias = new \Application\Router\Alias('/node[/:id]'); return $alias; }, ) ); }
// Application\src\Application\Router namespace Application\Router; use Traversable; use Zend\Mvc\Router\Exception; use Zend\Stdlib\ArrayUtils; use Zend\Stdlib\RequestInterface as Request; use Zend\Mvc\Router\Http; use Zend\Mvc\Router\Http\Segment as Segment; class Alias extends Segment { private static $_navigation = null; public function match(Request $request, $pathOffset = null) { $uri = $request->getUri(); $path = $uri->getPath(); $items = self::$_navigation->findAllBy('route', 'node'); $params = null; if($items != null){ $t = sizeof($items); for ($i=0; $i getParams(); if (isset($params['link']) && $params['link']==$path){ echo $uri->setPath('/'.$item->getRoute().'/'.$params['id']); $request->setUri($uri); break; } } } return parent::match($request, $pathOffset); } public function setNavigation($navigation){ self::$_navigation = $navigation; } protected function buildPath(array $parts, array $mergedParams, $isOptional, $hasChild, array $options) { if(isset($mergedParams['link'])){ return $mergedParams['link']; } return parent::buildPath($parts, $mergedParams, $isOptional, $hasChild, $options = array()); } }
Когда я запускаю этот URL www.domainname.com/about-us в браузере получать сообщение об ошибке 404. Пожалуйста, помогите мне, где я ошибаюсь, и какой код нужно добавить или изменить?
Heyho, я не имеют достаточно времени, чтобы DIGG в это, но это уже очень большой модуль (кэширование включено), что делает именно то, что вы необходимость! Он называется ['PhlySimplePage'] (https://github.com/weierophinney/PhlySimplePage) Мэтью Вейер О'Финни (архитектор ZF2) – Sam