Например, я точно не знаю какие страницы будут на сайте, т.е. могут добавлятся по мере необходимости.
Например /about/, /about/history/ - и т.п.
Т.е., по сути своей они сами контроллерами не являются.
Подскажите, как можно создать подобный контроллер, (по сути своей типа 404, если по заданным урлам не найдены нужные контроллеры), который будет обрабатывать все входящие запросы и уже дальше определять - это реальный контроллер, или "статичная страничка" ?
Как вариант ты можешь создать контроллер статичных страниц, а в нем Action -> actionViewFlatPage. Методом GET передавать туда значения страниц - например mysite.com/flatpages/viewflatpage/about/
Только что на предыдущей странице тема была: http://www.yiiframework.com/forum/index.php?/topic/2691-динамическая-обработка-url-поиск-url-в-базе/ В четвертом ответе есть ссылка на что-то похожее на CMS, там как реализовано в этом духе. Т.е. если страница не найдена, то ищется url а базе. Судя по всему, вам нужно что-то похожее, но проще всего сделать контроллер дерева страниц (которое будет храниться в БД).
public function actionResolveUrl($url) {
if (empty($url))
return new CHttpException(404, 'The requested page doesn\'t found');
// first check for static url
if (($page = StaticPage::model()->find('url=:url', array(':url' => $url)))) {
$this->layout = 'main';
$this->render('static', array('page' => $page));
Yii::app()->end();
}
return new CHttpException(404, 'The requested page doesn\'t found');
}
main.php
// это для юрл в виде site.com/about.html
'<url:[^\/]+>'=>array('site/resolveUrl','urlSuffix'=>'.html'),