我正在使用ZF2并尝试设置使用冒号分隔符的Route配置。
例如,网址可能是 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)。例如,可以使用dbp:Semantic_Web在文档中引用带有@prefix dbp:http://dbpedia.org/data/Semantic_Web的长{u},例如http://dbpedia.org/resource/。因此,对于我的Linked Data服务器,我可以直接请求并包含前缀(名称空间)和资源名称;例如http://myserver.com/dbp:Semantic_Web。虽然我现在正在使用段组合/命名空间/资源,但处理带有前缀:资源语法的路由会很好。
答案 0 :(得分:0)
不要在路线中使用冒号。这不是一个好习惯,因为冒号是保留字符(见http://tools.ietf.org/html/rfc3986#section-2.2)
答案 1 :(得分: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);
您还需要修改路线配置。