1

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

example.com/news/12

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

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

有人知道怎么做吗?

4

2 回答 2

2

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

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

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

于 2015-05-27T19:49:02.773 回答
1

在你的 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'

这将包括:

  • example.com/news/man-dies-after-burning-himself
  • example.com/news/man-dies-after-burning-himself-2015-07-07
  • example.com/news/man
  • example.com/news/2015-07-07 .....
于 2015-05-27T20:06:24.073 回答