Страница 1 из 1

Работа с GET (ЧПУ)

Добавлено: 2013.02.07, 22:10
nepster
Есть урлы вида: http://сайт.ru/cpanel/param/

Роутер:
'cpanel/<id>/' => 'cpanel/index',
Смог распечатать и получить данные в контролере только так:

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

        echo '<pre>';
        print_r($_GET); 

Подскажите пожалуйста как правильно работать с GET данными.

На сколько я знаю по примеру CI
он их получал в методе:

url вида: http://сайт.ru/cpanel/test/param/param2/

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

function test($param,$param2)
{
 echo $param;

}
 

Правильно ли у меня вышло в Yii ?

И еще подскажите пожалуйста, как описывать правила для маршрута или где можно прочитать, так как оф документация вообще не понятно
'cpanel/<id:вот этот момент интересуент>/' => 'cpanel/index',

Re: Работа с GET (ЧПУ)

Добавлено: 2013.02.08, 04:43
gwer
Что конкретно не понятно в документации? Сюда ходили? 3 и 4 пункт все неплохо объясняют. С парой примеров разобраться и станет совсем ясно.
Вы бы говорили, что конкретно непонятно или как реализовать ту или иную задачу.
'cpanel/<id:вот этот момент интересуент>/' => 'cpanel/index',
<id> - GET-параметр 'id'. После двоеточия ставится регулярное выражение для значения этого параметра. <id:\d+> - число. <url:\S+> - строка. Адреса в правилах обрабатываются по порядку, сверху вниз.

Насчет GET'ов.
Можно объявить их как параметра в action'е:

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

function actionTest($id) {
}
И обращаться к указанным переменным. Но если будет вызван экшн без параметров, получим ошибку. Предположим, мы делаем профили пользователей. Если указывается id (/user/18), показываем профиль пользователя с id=18, а если не указан (/user/), то показываем профиль того, кто запрашивает.
Можно сделать с параметрами функции (как в примере выше), но тогда для /user/ придется писать отдельный экшн. То есть примерно так:

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

public function actionView($id){} // Отдаем юзера $id
public function actionViewmyself($id){} // Отдаем свой профиль  
И в путях:

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

'user/<id:\d+>/' => 'user/view',
'user' => 'user/viewmyself',
А можно сделать

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

public function actionView(){}
И тут уже вначале проверять, есть ли GET id, если есть, отдавать страницу нужного пользователя, если нет, показывать страничку того, кто запрашивает.
В таком случае берется $_GET['id']. Но можно использовать и getQuery из CHttpRequest. Он позволяет задать значение по умолчанию (если параметр не указан).

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

public function actionView(){
$id = Yii::app()->request->getQuery('id', Yii::app()->user->id);
// Выводим профиль пользователя $id
}
Не обязуюсь, что примеры рабочие, писал все из головы, но логика должна быть ясна.

Re: Работа с GET (ЧПУ)

Добавлено: 2013.02.08, 05:18
nepster
большое спасибо с подсказкой разобрался. Да бегал по мануалам, вот как раз запутался с

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

Yii::app()->request->getQuery('id', Yii::app()->user->id);
теперь уже понял.