У меня есть контроллер с именем 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);
}
Теперь метод view
в Controller
нуждается в доступе к этому, поэтому, когда ему передается имя типа «Foo-Bar», он может перевести его в «Foo Bar».
Файл представления 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; ?>
Каков наилучший способ справиться с этим без дублирования кода?