2013-04-14 46 views
0

我正在使用ZF2並嘗試設置使用冒號分隔符的路由配置。使用冒號分隔符的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)常用。例如,帶有@prefix dbp:http://dbpedia.org/resource/的長形URI如http://dbpedia.org/data/Semantic_Web可能會在具有dbp:Semantic_Web的文檔中引用。因此,對於我的關聯數據服務器,我可以引導請求幷包含前綴(名稱空間)和資源名稱;例如http://myserver.com/dbp:Semantic_Web。雖然我現在正在使用段組合/名稱空間/資源,但處理具有前綴:resource語法的路由會很好。

回答

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); 

你會還需要修改路由配置。