2011-06-01 41 views
1

我的鏈接:CakePHP的自定義路由W /%20 URL要替換瓦特/ 「 - 」 不知道如何做到這一點的路線

echo $link->link($planDetailsByCompany['PlanDetail']['name'], 
    array('controller' => 'plan_details', 'action' => 'view_benefit_schedule', 
    'id' => $planDetailsByCompany['PlanDetail']['id'], 
    'slug' => $planDetailsByCompany['PlanDetail']['name'])); 

我的定製路線:

Router::connect('/pd/:id-:slug', 
    array('controller' => 'plan_details', 'action' => 'view_benefit_schedule'), 
    array('pass' => array('id', 'slug'), 
    'id' => '[0-9]+')); 

我的網址顯示,像這樣:

..pd/44-Primary%20Indemnity 

我無法確定如何刪除%20並將其替換爲「 - 」。公司名稱中有一個導致此問題的空間。這可能在CakePHP路由器功能中嗎?如果是這樣,怎麼樣?或另一種方法。

回答

0

Geeze ..我剛解決了這個!

在我上面的鏈接,請用「塞」行:

...'slug' => Inflector::slug($planDetailsByCompany['PlanDetail']['name'])... 

變形器處理的空間在URL中。而我的結果網址是:

...pd/44-Primary_Indemnity 
+0

但這可能只適用於此/您的情況。如果你使用真正的slu,子,那麼url需要沒有id。要使用真正的slu you,你需要一個額外的獨特的數據庫字段,並在那裏保存slu((使用Inflector :: slug) – alexdd55 2011-06-01 20:06:33

+0

http://42pixels.com/blog/slugs-ugly-bugs-pretty-urls你*不*需要有一個db字段來執行slug查找。此方法使用自定義路由和參數來執行slug類型的url。否則,你需要確定你的PlanDetail.name值是完全唯一的 - 如果沒有,那麼你的slu could可能會匹配2個ID使用Inflector :: slug在字段上,就像你正在做的那樣。 – 2011-06-02 02:29:40

+0

除了我的解決方案,Inflector :: slug()還有一個額外的參數(默認爲下劃線),我想要破折號,所以在第二個參數中,只需添加你想要的分隔符:['PlanDetail'] [''名稱'],' - '),然後破折號替換默認的下劃線。 – OldWest 2011-06-02 04:20:25