我正在构建我的第一个 Zend Framework 应用程序,我想找出从 URL 获取用户参数的最佳方法。
我有一些具有index
、add
和action 方法edit
的控制器。action 可以带一个参数,delete
and动作可以带一个参数。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);