shapovalov_org
@shapovalov_org
Инженер-программист

Как добавить кастомно задаваемые ЧПУ используя Yii фреймворк?

Здравствуйте, есть задача которую я решил влоб, если есть более простое и изящное решение был бы рад помощи! Есть поле 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, старый сайт был спарсен и стоит задача сохранить доступность материалов по старым ссылкам + возможность добавлять новые материалы с задаваемой пользователем ссылкой в том числе кириллические
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
shapovalov_org
@shapovalov_org Автор вопроса
Инженер-программист
Видимо более простого способа нет, ну значит "и так сойдет" )))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Я думаю, что все старые ссылки надо редиректить на новые места с адекватной структурой с помощью htaccess иначе потом замучаетесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы