0

我正在使用 ZF2 并尝试设置使用冒号分隔符的路由配置。

例如,网址可以是www.example.com/namespace:subject,我想将其发送到特定的控制器,并使用两个变量进行操作。我正在尝试使用正则表达式,因为冒号“:”是段的特殊字符。有没有很好的方法来做到这一点?这是我的路线配置:

'dataReqs' => array(
    'type' => 'regex',    
    'options' => array(
        'regex' => '/(?<namespace>[^:]+).(?<subject>[a-zA-Z0-9_-]+)',
        'defaults' => array(
            'controller' => 'Application\Controller\Data',
            'action'     => 'get',
        ),
        'spec' => '/%namespace%:%subject%',
    ),
),

编辑:我想使用冒号作为前缀:资源格式通常用于 RDF 语法(http://www.w3.org/TR/2007/PR-rdf-sparql-query-20071112/#QSynIRI)。例如,像http://dbpedia.org/data/Semantic_Web这样带有 @prefix dbp: http://dbpedia.org/resource/的长 uri可以在带有 dbp:Semantic_Web 的文档中引用。因此,对于我的关联数据服务器,我可以直接请求并包含前缀(命名空间)和资源名称;例如http://myserver.com/dbp:Semantic_Web。虽然我现在使用段组合 /namespace/resource,但最好使用前缀:资源语法来处理路由。

4

2 回答 2

0

我倾向于同意kormik。为什么要以这种方式指定 URL?默认行为有什么问题?

www.example.com/namespace/subject

例如:

www.example.com/somenamespace/10

甚至:

www.exmple.com/namespace/namespace/subject/subject

例如

www.example.com/namespace/somenamespace/subject/10

您可以像这样轻松地在控制器中获取这些参数:

$ns = $this->params()->fromRoute('namespace',0);
$subject = (int) $this->params->fromRoute('subject',0);

您还需要修改路由配置。

于 2013-04-14T17:59:00.147 回答
0

不要在您的路线中使用冒号。这不是一个好习惯,因为冒号是保留字符(请参阅https://www.rfc-editor.org/rfc/rfc3986#section-2.2

于 2013-04-14T17:32:27.400 回答