我是zend的新手,我想用zf2创建一个小应用程序。
我的问题是关于seo-friendly-urls。
对于我的项目,我想要像'domain.tld / my-product-xyz'(requestPath)这样的网址
实际上我只有像'domain.tld / module / action / id'(targetPath)这样的网址
我从magento知道可以将requestPath和targetPath存储在数据库中,以便通过搜索requestPath来获取正确的targetPath。
我已经阅读了以下关于zf2中自定义路由的文章,并完成了他写的所有内容: http://www.zendexperts.com/2012/12/09/custom-routing-in-zend-framework-2/
我想我只需要编辑这个功能,但我不知道如何。
public function match(Request $request, $pathOffset = null)
{
// get the service locator
$serviceLocator = $this->routePluginManager->getServiceLocator();
//@todo do something with the request and return an RouteMatch instance
return false;
}
我想出了如何创建一个有效的RouteMatch-Object,但在我看来这是一种复杂的方式,我认为有一种更简单的方法可以做到这一点,因为对于每个网址,我都存储了正确的模块,操作和数据库中的id:
$routematchvar->setParam('controller','Module/Controller/Module');
$routematchvar->setParam('action','action');
$routematchvar->setParam('id', 'id');
return $routematchvar;
是否可以更改请求对象的URI?我尝试使用以下命令:$ request-> setUri(targetPath)。但是zend只是停止工作并写出了targetPath。
抱歉我的英语不好:( 谢谢你的帮助!答案 0 :(得分:0)
在我看来,最简单的方法是使用RegEx Route's。文档非常好,应该清楚一点。请记住,使用"格式"非常重要。在您的RegEx中,否则您的路线将失败。
您确实可以扩展匹配,但使用内置功能通常是更好的方法。