Здравствуйте, есть задача которую я решил влоб, если есть более простое и изящное решение был бы рад помощи! Есть поле link в таблице где задается название ссылки после домена, например так,
http://site/данные-из-переменной-link т.е. это поле уникально и материал вытаскивается из базы по значению этого поля. Реализовал так, настроил файл main.php в директории config перенаправив запросы к одному контроллеру который их все разбирает, т.к. в базе есть ещё таблицы в которых хранятся данные с ранее заданными ссылками, приходится делать дополнительную проверку.
(Обновлено, реализовал так, всё разбирается в одном контроллере, кириллические ссылки работают через функцию utf8_encode, возможно задавать практически любые символы)
в конфиг файле:
'urlManager'=>array(
'urlFormat' => 'path',
'showScriptName' => false,
'caseSensitive' => true,
'useStrictParsing'=>true,
'urlSuffix'=>'/',
'rules' => array(
'admin/<_c>/<_a>/*' => 'admin/<_c>/<_a>',
'gii/<_c>/<_a>/*' => 'gii/<_c>/<_a>',
'gii/*' => 'gii/',
'admin/*' => 'admin/',
'site/<_a>/*' => 'site/<_a>',
'<link:[\w\W]+>' => 'content/get',
'/*' => '',
),
),
в контроллере:
public function actionGet($link)
{
$url=utf8_encode($_SERVER['REQUEST_URI']);
$model=Categories::model()->findBySql('SELECT * FROM tbl_categories WHERE link=:query',array(':query'=>trim($url)));
if($model!=NULL)
{
$data=Content::model()->findBySql('SELECT * FROM tbl_content WHERE category=:cat',array(':cat'=>$model->id));
$this->render('view',array(
'model'=>$model,
'data'=>$data
));
}
else
{
$model=Content::model()->findBySql('SELECT * FROM tbl_content WHERE link=:query',array(':query'=>trim($url)));
if($model!=NULL)
{
$this->render('view',array(
'model'=>$model,
));
}
else
throw new CHttpException(404,'The requested page does not exist.');
}
}
Есть ли более простой способ прикрутить кастомно задаваемые ЧПУ к Yii?
Вопрос возник в связи с переводом старого сайта с тысячами материалов и ссылками на них на Yii, старый сайт был спарсен и стоит задача сохранить доступность материалов по старым ссылкам + возможность добавлять новые материалы с задаваемой пользователем ссылкой в том числе кириллические