使用 Zend_Controller_Router_Route 为 IndexController 中的操作创建友好的 URL

发布于 2024-08-25 00:43:48 字数 855 浏览 13 评论 0原文

在我的 IndexController 中,我目前有indexAction(主页)、loginAction 和 logoutAction。我正在尝试从 URL 中删除“/index/”以获取domain.com/login 而不是domain.com/index/login。

实现这一目标的最干净的方法是什么?有我们可以使用的正则表达式吗?我不想在 URL 中包含 /index/ 。

我目前的解决方案如下,我相信可以对其进行改进。另外,addRoute() 中的第一个参数是做什么的?

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
  protected function _initViewHelpers()
  {
    $front  = Zend_Controller_Front::getInstance();
    $router = $front->getRouter();
    $router->addRoute('login',
      new Zend_Controller_Router_Route('login/*', array(
        'controller' => 'index',
        'action'     => 'login'
      ))
    );
    $router->addRoute('logout',
      new Zend_Controller_Router_Route('logout/*', array(
        'controller' => 'index',
        'action'     => 'logout'
      ))
    );
  }
}

In my IndexController, I currently have indexAction (homepage), loginAction and logoutAction. I'm trying to remove "/index/" from the URL to get domain.com/login instead of domain.com/index/login.

What is the cleanest way to achieve this? Is there a RegEx we can use? I don't ever want /index/ in the URL.

My current solution, which I believe can be improved upon, is below. Also, what does the first parameter in addRoute() do?

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
  protected function _initViewHelpers()
  {
    $front  = Zend_Controller_Front::getInstance();
    $router = $front->getRouter();
    $router->addRoute('login',
      new Zend_Controller_Router_Route('login/*', array(
        'controller' => 'index',
        'action'     => 'login'
      ))
    );
    $router->addRoute('logout',
      new Zend_Controller_Router_Route('logout/*', array(
        'controller' => 'index',
        'action'     => 'logout'
      ))
    );
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

贪恋 2024-09-01 00:43:48

没有什么可以改进的,你必须为每个动作创建路线。这将允许您更改路由默认值(模块/控制器/操作),而无需修改代码。

第一个参数是路由名称,您必须在视图中将其与 url() 帮助器一起使用:

<a href="<?php echo $this->url(array(), 'login', true); ?>">Login</a>

更新。如果您只想要一个 url 中没有“index”的路由,则可以使用这样的路由:

$router->addRoute('default',
  new Zend_Controller_Router_Route(':action/*', array(
    'controller' => 'index',
  ))
);

There is nothing to impove, you have to create route for every action. This will allow you to change route defaults (module/controller/action) without modifying your code.

First parameter is the route name, which you have to use with url() helper in your views:

<a href="<?php echo $this->url(array(), 'login', true); ?>">Login</a>

Update. You can use such route, if you want only one route without "index" in url:

$router->addRoute('default',
  new Zend_Controller_Router_Route(':action/*', array(
    'controller' => 'index',
  ))
);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文