我在构建我的第一个Zend Framework应用程序,我想找出从URL中获取用户参数的最佳方法。获取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);
这意味着对于每个控制器,我需要添加至少三条路线:
- 一个用于与该“指数”行动:页面参数
- 一个用于与“编辑”行为: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);
我看到您的第一个url结构有问题。你说“'/ post' url列出了所有的帖子,可能有一些**分页**”。这意味着我们需要传递一个页面参数:'/ post /:page'。另一方面,'/ post' url也需要一个获取单个记录的方法,如下所示:'/ post /:id'。我们如何知道用户是否指定了页面ID或recrd ID? –
我倾向于通过querystring传递参数params,而不一定是路由路径的一部分。 –