Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
|
И вновь вопрос о маршрутизации в этом фреймворке.
Так уж вышло, что пришлось на нем поднимать раздел сайта, а не целиком сайт.
Сам фреймворк, вместе с разделом находятся не в корневой директории проекта:
htcdocs/catalog/catalog-new/
запросы вида:
site.ru/catalog/
перенаправляются в:
site.ru/catalog/catalog-new/publ ic/index.php
Соответственно, физические директории проекта yii:
htdocs/catalog/catalog-new/publi c/
htdocs/catalog/catalog-new/protected/
htdocs/catalog/catalog-new/yii/
конфиг:
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
function _joinpath($dir1, $dir2) { } $homePath = dirname(__FILE__) . '/../..'; $protectedPath = _joinpath($homePath, 'protected'); $runtimePath = _joinpath($homePath, 'runtime'); 'basePath' => $protectedPath, 'runtimePath' => $runtimePath, 'name' => 'test application', 'defaultController' => 'demo', 'preload' => array('log'), 'application.components.*', 'application.helpers.*', 'application.extensions.*', ), 'errorAction' => 'demo/error', ), 'urlFormat' => 'path', 'showScriptName' => false, 'search' => 'demo/search', 'profile' => 'demo/profile', 'filials' => 'demo/filials', 'geoSearch' => 'demo/geoSearch', 'geoCoord' => 'demo/geoCoord', '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), ),
Ранее открывал уже тему по этому вопросу.
В тот раз было ограничено время на развлечения с этим Yii.
Поэтому, чтобы запросы нормально перенаправлялись к действия контроллера Demo сделал в Index.php такой костыль:
PHP:
скопировать код в буфер обмена
/* Костыль помогает фреймворку найти действие контроллера. Штатными средствами по ману их (пути) указать не удалось! Yii строит урлы используя REQUEST_URI, поэтому вписал костыльный метод cleanUrl(), который также как createUrl() строит урл, а также, дополнительно удаляет лишнюю его часть (третий параметр метода - регулярка). Нужно обязательно разобраться как настроить Yii когда на нем работает раздел не в корневом каталоге сайта */ $_SERVER['REQUEST_URI']=str_replace('/catalog/', '/catalog/new-catalog/public/',$_SERVER['REQUEST_URI']);
Теперь вот встала задача раздел расширять, и писать костыль на костыле больше не хочется. Как понятно из комента, - Yii строит из REQUEST_URI урлы для всех ссылок во вьюхах (без костыльного метода cleanUrl() он строит так - /catalog/new-catalog/public/profile?filial_id=6) следовательно пора разбираться.
Вопрос - как написать правила под указанные в конфиге три метода: search, profile, filials, чтобы можно было отказаться от этого костыля с переназначением $_SERVER['REQUEST_URI'] ?(Отредактировано автором: 30 Апреля, 2013 - 15:00:49)
|