如何使用文本而不是 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
如果您检查 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 .....
目前,我的 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:
如果您检查 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 .....