Я искал все форумы Stackoverflow и YII, есть много ответов, которые мне не помогли...
Это мой случай.
У меня есть контроллер с именем: proj и действие с именем view. Он получает: id(int), name(string).
Желаемое имя иногда получает специальные символы, такие как: [+,!#$%^&*-]
Поэтому, когда я запускаю функцию createUrl(), она возвращает мне не очень удобный URL-адрес.
id = 1029 name = Сохранение системы солончаков Вермонта, Херманус, Южная Африка.
Я хочу, чтобы результат был следующим: http://www.qa-mysite.com/proj/1029/conservation-of-the-vermont-salt-pan-system-hermanus-south-Africa
Так что на самом деле мне нужно убрать специальные символы и изменить разделитель между пробелами на «-» вместо «+».
Мои текущие конфигурации curlManager:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'appendParams' => true,
'rules'=>array(
//array('proj/view/<name:\w+>', 'pattern'=>'proj/<id:\d+>'),
//'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'proj/<id:\d+>/<name:\w+>'=>array('proj/view', 'caseSensitive'=>false),
'<controller>/<id:\d+>/<name:.*?>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
)
Пример CreateUrl:
$this->createUrl('proj/view', array('id' => $data->id, 'name' => $data->name));
После того, как URL-адреса будут изменены, мне нужно сделать 301 переадресацию со старых на новые, оптимизированные для SEO.
Примечание. Я не могу сделать жестко запрограммированный файл str_replace.
Большое спасибо за любую помощь:]