我有一個名爲DesignersController
的控制器,index
方法列出它們,view
方法接受設計器名稱作爲參數並按名稱檢索它。我知道視圖和控制器不應該共享邏輯......但我還能如何做到這一點?
所以/designers
將列出所有的設計師和/designers/view/designer-name
將顯示該設計師。
現在,如果一個設計器名稱有一個空格,它需要在URL中轉義。我有邏輯轉義非轉義空格:
private $space_escape_char = '-';
function escapeSpaces($str)
{
return str_replace(" ",$this->space_escape_char,$str);
}
function unescapeSpaces($str)
{
return str_replace($this->space_escape_char," ",$str);
}
現在在Controller
需求view
方法訪問此所以當它通過一個名稱,如「富酒吧」可以翻譯成「富酒吧」。
的index.ctp視圖文件也需要訪問它,所以當它列出了所有的設計者它可以給鏈接到每個人,並且能夠逃脫每個名字:
<?php foreach ($designers as $designer): ?>
<div>
<?php
echo $this->Html->link(
$designer['Designer']['name'],
array(
'controller' => 'designers',
'action' => 'view',
escapeSpaces($designer['Designer']['name'])
)
);
?>
</div>
<?php endforeach; ?>
什麼是最好的如何處理這個沒有代碼重複?
http://www.42pixels.com/blog/slugs-ugly-bugs-pretty-urls - 這是一種使用自定義路由的方法,它使用動態創建的slu to映射到特定的Model :: id值。比在數據庫中儲存slu Better更好。 – 2010-12-07 23:45:41