zf2 URI像magento一样重写

时间:2014-09-28 19:34:13

标签: routing zend-framework2

我是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。

抱歉我的英语不好:( 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

在我看来,最简单的方法是使用RegEx Route's。文档非常好,应该清楚一点。请记住,使用"格式"非常重要。在您的RegEx中,否则您的路线将失败。

您确实可以扩展匹配,但使用内置功能通常是更好的方法。