【发布时间】:2012-11-03 15:04:00
【问题描述】:
我正在构建我的第一个 Zend Framework 应用程序,我想找出从 URL 获取用户参数的最佳方法。
我有一些控制器具有index、add、edit 和delete 操作方法。 index 操作可以采用page 参数,edit 和delete 操作可以采用id 参数。
Examples
http://example.com/somecontroller/index/page/1
http://example.com/someController/edit/id/1
http://example.com/otherController/delete/id/1
到目前为止,我在操作方法中获取这些参数是这样的:
class somecontroller extends Zend_Controller_Action
{
public function indexAction()
{
$page = $this->getRequest->getParam('page');
}
}
但是,一位同事告诉我使用 Zend_Controller_Router_Rewrite 的更优雅的解决方案如下:
$router = Zend_Controller_Front::getInstance()->getRouter();
$route = new Zend_Controller_Router_Route(
'somecontroller/index/:page',
array(
'controller' => 'somecontroller',
'action' => 'index'
),
array(
'page' => '\d+'
)
);
$router->addRoute($route);
这意味着我需要为每个控制器添加至少三个路由:
- 一个用于带有 :page 参数的“索引”操作
- 一个用于带有 :id 参数的“编辑”操作
- 一个用于带有 :id 参数的“删除”操作
请参阅下面的代码作为示例。这些只是一个控制器的 3 个基本动作方法的路由,想象一下有 10 个或更多控制器......我无法想象这是最好的解决方案。我看到的唯一好处是参数键已命名,因此可以从 URL 中省略(somecontroller/index/page/1 变为 somecontroller/index/1)
// Route for somecontroller::indexAction()
$route = new Zend_Controller_Router_Route(
'somecontroller/index/:page',
array(
'controller' => 'somecontroller',
'action' => 'index'
),
array(
'page' => '\d+'
)
);
$router->addRoute($route);
// Route for somecontroller::editAction()
$route = new Zend_Controller_Router_Route(
'somecontroller/edit/:id',
array(
'controller' => 'somecontroller',
'action' => 'edit'
),
array(
'id' => '\d+'
)
$router->addRoute($route);
// Route for somecontroller::deleteAction()
$route = new Zend_Controller_Router_Route(
'somecontroller/delete/:id',
array(
'controller' => 'somecontroller',
'action' => 'delete'
),
array(
'id' => '\d+'
)
$router->addRoute($route);
【问题讨论】: