如何使用zend_config编写url /:lang / display-cv-:cvid?

时间:2011-05-19 06:15:24

标签: zend-framework zend-route zend-config

我有一个名为routes.ini的zend_config文件。

目前我的网址看起来像这样:/ LanguageCode / display-cv /:CVID

由此路线定义:

routes.display-cv.route = /:LanguageCode/display-cv/:CVID
routes.display-cv.defaults.controller = users-profile
routes.display-cv.defaults.action = display-cv
routes.display-cv.defaults.CVID =
routes.display-cv.reqs.CVID = "\d+"
routes.display-cv.defaults.LanguageCode = 'en'
routes.display-cv.reqs.LanguageCode = "[a-z]{2}"

导致/ en / display-cv / 1

但是我的老板想要这个:

/en/display-cv-1.html

我试着简单地改变:

routes.display-cv.route = /:LanguageCode/display-cv/:CVID

于: routes.display-cv.route = /:LanguageCode/display-cv-:CVID.html但结果是: /en/display-cv-:CVID.html。它被认为是一个静态网址。

然后我这样称呼它:

<?php foreach ($this->CvList as $CV){ ?>
<a href="<?php echo $this->url(array(
    'action'        => 'display-cv',
    'CVID'          => $CV->CVID,
    'LanguageCode'  => 'en'
        ),'display-cv'); ?>">
   <?php echo $CV->CvName; ?> <BR/>
   </a>
<?php }  ?>

如何更改上面的配置才能实现此目的?

1 个答案:

答案 0 :(得分:1)

您需要使用Zend_Controller_Router_Route_Regex。例如,对于您的情况,我认为您可以这样做:

resources.router.routes.display-cv.route = "(.+)/display-cv-(\d+)\.html"
resources.router.routes.display-cv.type = "Zend_Controller_Router_Route_Regex" 
resources.router.routes.display-cv.defaults.controller = users-profile
resources.router.routes.display-cv.defaults.action = display-cv
resources.router.routes.display-cv.map.1 = LanguageCode
resources.router.routes.display-cv.map.2 = id
resources.router.routes.display-cv.reverse = "/%s/display-cv-%d.html"

希望这有帮助。

编辑: ID和反向网址都有错误。

routes.display-cv.route = "(.+)/display-cv-(\d+)\.html"
routes.display-cv.type = "Zend_Controller_Router_Route_Regex" 
routes.display-cv.defaults.controller = users-profile
routes.display-cv.defaults.action = display-cv
routes.display-cv.map.1 = LanguageCode
routes.display-cv.map.2 = CVID
routes.display-cv.reverse = "%s/display-cv-%d.html"