Zend framework2 zf2中内容页的自定义路由
欢迎所有zend编码人员。我是zend的新手,通过DB编写管理页面的代码。 我想对这些页面使用URL,如下所示: www.domainname.com/about-us www.domainname.com/contact-us 表名为“cms_页面”&属性为: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
`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()); } }