如何使用文本而不是 ID 来路由页面?

How to route pages using text instead of IDs?

目前,我的 Zend 应用程序路由使用 URL:

example.com/news/12

选择 ID 为 12 的新闻显示在页面上。
但是客户端只想使用文本,例如:

example.com/news/man-dies-after-burning-himself

有人知道怎么做吗?

有几种方法。没有您的代码,将很难解释,但我会试一试。首先,有一种方法可以解决这个问题,就是用一个名为 friendlyUrl 的属性存储新闻(例如),而不是 select 通过 ID 编辑新闻,你 select 通过friendlyUrl,但是,您必须始终检查该 friendlyUrl 是否没有存储其他新闻。 friendlyUrl 应该来自新闻标题,该标题使用一个函数解析,该函数删除了 urls 中不允许的所有特殊字符,并将空格替换为“-”。另一种方式是 Whosebug 的方式,例如,在 urls:

中使用 ID 和 TEXT

How to route pages using text instead of IDs?

如果您检查 url,您将首先看到 id,然后是 friendlyUrl 或 friendlyName 或任何您想调用的名称。

在你的module.config.php

'router' => array(
    'routes' => array(
        'news' => array(
            'type' => 'Zend\Mvc\Router\Http\Segment',
            'options' => array(
                'route' => '[/:news][/:url][/]', 
                'constraints' => array(
                    'url' => '[a-zA-Z][a-zA-Z0-9_-]*',
                ),
                'defaults' => array(
                    '__NAMESPACE__' => 'YourModule\Controller',
                    'controller'    => 'News',
                    'action'        => 'index',
                ),
            ),
        ),
    ), 
),

如果您选择使用文本而不是 Id,则必须确保 url 是唯一的,否则您的应用程序将切断第一个匹配项。 在您添加的示例中:

url = 'man-dies-after-burning-himself'

这将涵盖:

  • 示例。com/news/man-dies-after-burning-himself
  • 示例。com/news/man-dies-after-burning-himself-2015-07-07
  • 示例。com/news/man
  • 示例。com/news/2015-07-07 .....