Формирование URL в CLinkPager

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
yegor
Сообщения: 26
Зарегистрирован: 2009.08.31, 10:44

Формирование URL в CLinkPager

Сообщение yegor »

Есть форма поиска, которая дергает данные не только с БД. Но суть не в этом. Все данные этой формы передаются ввиде массивов. То есть в строку запроса уходит нечто вроде

index.php?Mass[param1]=value1&Mass[param2]=value2

Так вот, после вывода результатов этой формы нужно поставить пейджинг, все бы хорошо использовать виджет CLinkPager, но после прохождения метода createUrl ссылки приобретают вид

index.php/Mass[param1]/value1/Mass[param2]/value2

Соответственно возникает ошибка в контроллере, так как массив $_GET[Mass][param1] - пустой, зато появился $_GET[Mass[param1]] (это предположение). Как нормализовать работу с помощью UrlManager, может какие-то правила прописать. Но параметров у формы очень много.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Формирование URL в CLinkPager

Сообщение Ekstazi »

CUrlManager + urlFormat
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: Формирование URL в CLinkPager

Сообщение SpiLLeR »

Скорее всего это из-за того, что в конфиге у и тебя 'urlFormat' => 'path'. Попробуй в контролере или в нужном методе CUrlManager::setUrlFormat('get');
Предупрежден - значит вооружен.
devKP.ru
yegor
Сообщения: 26
Зарегистрирован: 2009.08.31, 10:44

Re: Формирование URL в CLinkPager

Сообщение yegor »

Хороший совет, приду на работу - попробую. 'urlFormat' => 'path' - это однозначно стоит для ЧПУ.

Спасибо.
yegor
Сообщения: 26
Зарегистрирован: 2009.08.31, 10:44

Re: Формирование URL в CLinkPager

Сообщение yegor »

Попробовал предложенное решение, но оно не помогло. После того, как я добавил следующий код в метод контроллера:

Код: Выделить всё

$url_manager = new CUrlManager;
$url_manager->setUrlFormat('get'); 
Сама страница с формой приобрела URL с GET-видом. То есть "site.ru/?r=search", но ссылки на другие страницы так же остались в 'path' - формате. Причем, если поменять значение urlFormat в конфиге сайта, тогда пейджинг генерирует GET-ссылки. То есть нужно копать в том же направлении...
yegor
Сообщения: 26
Зарегистрирован: 2009.08.31, 10:44

Re: Формирование URL в CLinkPager

Сообщение yegor »

Окончательно разобрался. Метод работает нормально, только его нужно было вызывать через статический класс Yii.

Код: Выделить всё

Yii::app()->getUrlManager()->setUrlFormat('get'); 

Таким образом, мы обратились к CUrlFormat а потом к его методу setUrlFormat. И значение 'get' корректно записалось в свойство $_urlFormat.

Если же делать так, как прежде предлагали:

Код: Выделить всё

CUrlManager::setUrlFormat('get'); 
Тогда при выполнении метода:

Код: Выделить всё

public function setUrlFormat($value)
    {
        if($value===self::PATH_FORMAT || $value===self::GET_FORMAT)
            $this->_urlFormat=$value;
        else
            throw new CException(Yii::t('yii','CUrlManager.UrlFormat must be either "path" or "get".'));
    } 
Нарываемся на исключение, так как обращение к свойству $_urlFormat идет через $this, а он, в свою очередь, является ссылкой на объект от нашего контроллера, который сейчас работает.
Ответить