gpt4 book ai didi

zend-framework - 获取 Zend 框架 URL 参数

转载 作者:行者123 更新时间:2023-12-04 06:40:03 25 4
gpt4 key购买 nike

我正在构建我的第一个 Zend Framework 应用程序,我想找出从 URL 获取用户参数的最佳方法。

我有一些 Controller 有 index , add , editdelete行动方法。 index行动可以采取page参数和 editdelete行动可以采取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);

这意味着对于每个 Controller ,我至少需要添加三个路由:
  • 一个用于带有 :page 参数的“索引”操作
  • 一个用于带有 :id 参数的“编辑”操作
  • 一个用于带有 :id 参数的“删除”操作

  • 请参阅下面的代码作为示例。这些是一个 Controller 只有 3 个基本操作方法的路由,想象一下有 10 个或更多 Controller ......我无法想象这是最好的解决方案。我看到的唯一好处是参数键被命名,因此可以从 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);

    最佳答案

    我倾向于这样看:

  • 确定加工要求。

    每个“ Action ”需要什么?编辑操作和删除操作可能需要 :id 参数。添加操作和列表操作可能不会。这些 Controller / Action 然后使用参数并进行处理。

    注意:您可以编写这些 Controller /操作,而无需引用将访问者带到那里的网址。这些操作只是期望将它们的参数传递给它们。
  • 决定(!)你想要什么网址。

    一般来说,我找到了 (/:module/):controller/:action部分 url 基本上可以正常工作(除了顶级相对静态页面,如 /about ,我经常将操作放在 IndexController(或 StaticController)上,并且讨厌必须在 url 中包含 /index 前缀。

    因此,要处理帖子,您可能需要以下网址:
  • /post - 列出所有帖子,可能还有一些分页
  • /post/:id - 显示特定帖子
  • /post/:id/edit - 编辑特定帖子
  • /post/:id/delete - 删除特定帖子
  • /post/add - 添加帖子

  • 或者,您可能想要:
  • /post/list - 列出所有帖子,可能还有一些分页
  • /post/display/:id - 显示特定帖子
  • /post/edit/:id - 编辑特定帖子
  • /post/delete/:id - 删除特定帖子
  • /post/add - 添加帖子

  • 或任何其他网址方案。关键是,您决定要公开的网址。
  • 创建路由...

    ...将这些 url 映射到 Controller /操作。 [并确保无论何时渲染它们,都使用 url()带有路由名称的 View 助手,以便路由更改不需要更改操作或 View 中的下游代码。

  • 您最终会以这种方式编写更多路线吗?是的,我发现我这样做了。但是,对我来说,好处是我可以决定我的网址。我不拘泥于 Zend 默认设置。

    但是,与大多数事情一样,YMMV。

    关于zend-framework - 获取 Zend 框架 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13390320/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com