Zend framework2 zf2中内容页的自定义路由

Zend framework2 zf2中内容页的自定义路由,zend-framework2,zend-route,zend-router,Zend Framework2,Zend Route,Zend Router,欢迎所有zend编码人员。我是zend的新手,通过DB编写管理页面的代码。 我想对这些页面使用URL,如下所示: www.domainname.com/about-us www.domainname.com/contact-us 表名为“cms_页面”&属性为: `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `page_key` varchar(255) NOT NULL, `cont

欢迎所有zend编码人员。我是zend的新手,通过DB编写管理页面的代码。 我想对这些页面使用URL,如下所示:

www.domainname.com/about-us

www.domainname.com/contact-us

表名为“cms_页面”&属性为:

`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,
我已经为此进行了研发,以下是代码:

// 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, ), ), ), //在module.config.php中 “导航”=>数组( '默认'=>数组( '帐户'=>数组( “标签”=>“帐户”, “路由”=>“节点”, “params”=>数组( 'id'=>'2', ), “页面”=>数组( '主'=>阵列( “标签”=>“仪表板”, “路由”=>“节点”, “params”=>数组( 'id'=>'1', '链接'=>'/test' ), ), '登录'=>数组( “标签”=>“登录”, “路由”=>“节点”, “params”=>数组( 'id'=>'5', '链接'=>'/关于我们' ), ), “注销”=>数组( “标签”=>“注销”, “路由”=>“节点”, “params”=>数组( 'id'=>'3', ), ), ), ), ), ), “路由器”=>阵列( “路由”=>数组( '主'=>阵列( 'type'=>'Zend\Mvc\Router\Http\Literal', “选项”=>数组( “路由”=>“/”, “默认值”=>数组( “控制器”=>“应用程序\控制器\索引”, “操作”=>“索引”, ), ), ), “节点”=>数组( '类型'=>'应用程序\路由器\别名', “选项”=>数组( “路由”=>“/node[/:id]”, '约束'=>数组( “id'=>”[0-9]+' ), “默认值”=>数组( “\uuuu名称空间”=>“应用程序\控制器”, “控制器”=>“索引”, “操作”=>“索引”, “id”=>“0” ), ), “may_terminate”=>true, ), ), ), //在Module.php中 引导上的公共函数(MvcEvent$e) { $app=$e->getApplication(); $sm=$app->getServiceManager(); $sm->get('translator'); $sm->get('viewhelpermanager')->setFactory('controllerName',函数($sm)use($e){ $viewHelper=newview\Helper\ControllerName($e->getRouteMatch()); 返回$viewHelper; }); $eventManager=$e->getApplication()->getEventManager(); $moduleRouteListener=新的moduleRouteListener(); $modulerouttelistener->attach($eventManager); $sm->setFactory('Navigation','Zend\Navigation\Service\DefaultNavigationFactory',true); $alias=$sm->get('Application\Router\alias'); $nav=$sm->get('Navigation'); $alias->setNavigation($nav); } 公共函数getServiceConfig() { 返回数组( “工厂”=>数组( “应用程序\路由器\别名”=>函数($sm){ $alias=new\Application\Router\alias('/node[/:id]'); 返回$alias; }, ) ); } //应用程序\src\Application\Router 名称空间应用程序\路由器; 使用可遍历; 使用Zend\Mvc\Router\Exception; 使用Zend\Stdlib\ArrayUtils; 使用Zend\Stdlib\RequestInterface作为请求; 使用Zend\Mvc\Router\Http; 使用Zend\Mvc\Router\Http\Segment作为段; 类别名扩展段 { 私有静态$\u导航=null; 公共函数匹配(请求$Request,$pathOffset=null) { $uri=$request->getUri(); $path=$uri->getPath(); $items=self::$\u导航->findAllBy('route','node'); $params=null; 如果($items!=null){ $t=sizeof(项目); 对于($i=0;$i getParams(); 如果(isset($params['link'])&&&$params['link']==$path){ echo$uri->setPath('/'.$item->getRoute()'/'.$params['id']); $request->setUri($uri); 打破 } } } 返回父::匹配($request,$pathOffset); } 公共函数setNavigation($navigation){ self::$\u导航=$导航; } 受保护的函数构建路径(数组$parts、数组$mergedParams、$isOptional、$hasChild、数组$options) { 如果(isset($mergedParams['link'])){ 返回$mergedParams['link']; } 返回父级::buildPath($parts,$mergedParams,$isOptional,$hasChild,$options=array()); } } 当我在浏览器上运行此url www.domainname.com/about-us时,出现404错误。
请帮助我我哪里错了,需要添加或编辑哪些代码?

您可以使用a
Zend\u Controller\u Router\u Route
作为替代。下面是一个快速教程,介绍如何执行此操作:


Heyho,我没有足够的时间深入研究这个问题,但是已经有一个非常好的模块(包括缓存)可以满足您的需要!它由Matthew Weier O'Phinney(ZF2架构师)命名 // 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()); } }