带参数的自定义路线

时间:2012-04-01 09:46:55

标签: zend-framework routing

我想为url创建具有参数的客户路线。

 <a href='javascript:void(0)' onclick="window.location='<?php echo 
 $this->url(array('module' => 'courses', 'controller' => 'course', 'action' => 'add', 
'std_id' => $entry['std_id']), 'coursesadd', TRUE); ?>'">add course</a>

在这里我做了路由

$route = new Zend_Controller_Router_Route('courses/std_id/:std_id', 

array('module' => 'courses', 'controller' => 'course', 'action' => 'add'));

$routesArray = array('coursesadd' => $route );

$router->addRoutes($routesArray);

但它没有正确路由!

1 个答案:

答案 0 :(得分:1)

你的代码看起来很好,除了RockyFord悲伤 - 你应该只将这些参数传递给指定路由所需的url()帮助器(当使用'default'路由时,它确实需要模块,控制器,动作,但是你的' coursesadd'route只需要std_id参数)。此外,你应该改善你的路线:

$route = new Zend_Controller_Router_Route('courses/:std_id', array(
   'module'     => 'main',
   'controller' => 'product',
   'action'     => 'add',
   'std_id'     => null //default value if param is not passed
));

您的路线中的param_name/:param_value构造是多余的,因为您已经为参数命名,因此通过使用上述路线,您将在控制器中使用

获取std_id参数
$this->_getParam('std_id')

路由定义中的默认值可以避免抛出Zend_Controller_Router_Exception: std_id is not specified,但看起来$entry['std_id']未设置。