Манипуляция данных до их вывода

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
andry
Сообщения: 224
Зарегистрирован: 2009.11.08, 16:52

Манипуляция данных до их вывода

Сообщение andry » 2010.11.17, 09:40

интересует такой вопрос, есть ли некая функция которая подобная к примеру beforeSave() при сохранении записей в нутри этой функции можно делать какие то манипуляции с данными, вот только не при сохранении а при выводе записей, есть что нибудь?

т.к. у меня много контроллеров выводящие одно и тоже только по разным критериям к примеру по: "алфавиту", "поиск", новые "записи", и т.п. и если допустим нужно поле текст очистить от всех тегов то не пришлось делать во всех этих контролеров вставлять $model->content = srtip_tags($model->content); а прописать в одном методе модели как при beforeSave()


andry
Сообщения: 224
Зарегистрирован: 2009.11.08, 16:52

Re: Манипуляция данных до их вывода

Сообщение andry » 2010.11.17, 11:12

великолепно, всё чётко:)

pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: Манипуляция данных до их вывода

Сообщение pirrat » 2010.11.17, 12:10

мне кажется лучшей практикой в вашем случае сделать геттеры на поля, и в них проводить манипуляции над нужными полями.

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

public function getContent()
{
return srtip_tags($this->content);
}
 

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Манипуляция данных до их вывода

Сообщение slavcodev » 2010.11.17, 15:07

pirrat писал(а):мне кажется лучшей практикой в вашем случае сделать геттеры на поля, и в них проводить манипуляции над нужными полями.

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

public function getContent()
{
return srtip_tags($this->content);
}
 
Стоить помнить $model->attr выдаст именно значение атрибута, а не выполнит геттер (getAttr()) как в случае с компонентами.
Это кстати мне кажется большой минус. Геттер был бы лучше, но пока работает так :(
Жду Yii 3!

pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: Манипуляция данных до их вывода

Сообщение pirrat » 2010.11.18, 01:48

а кто мешает вызывать геттер на прямую (ну не считая компонентов yii, которые работают напрямую с свойствами)?!
тем более в большинство стандартов рекомендуется использовать методы вместо прямого обращения к свойствам.
во вторых таким образом мы частично избавляемся от "магии"
да и манипуляция со свойствами в обработчике события при выборке, как то "костыльно" выглядит чтоли...
в любом случае выбор за вами.

andry
Сообщения: 224
Зарегистрирован: 2009.11.08, 16:52

Re: Манипуляция данных до их вывода

Сообщение andry » 2010.11.20, 20:32

извиняюсь, видимо не был подписан на эту тему.
не знаю прав ли я или нет, и что требует стандарт, но мне предложенный первый совет помог, и честно признаться даже удобнее, ежели создавать методы для каждого свойства, и в дальнейшем может получиться такое если кол-во методов будет большое число, можно будет запутаться. Ничего личного, может это дело вкуса ;)

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Манипуляция данных до их вывода

Сообщение slavcodev » 2010.11.21, 19:18

andry, иногда нужен доступ к оригинальным данным.
Жду Yii 3!

Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Манипуляция данных до их вывода

Сообщение Ekstazi » 2010.11.22, 20:58

Где-то я видел onBeforeRender и onAfterRender )

Аватара пользователя
samdark
Администратор
Сообщения: 9250
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Манипуляция данных до их вывода

Сообщение samdark » 2010.11.22, 21:33

Вот тут кое-что есть на эту тему: http://yiiframework.ru/doc/cookbook/ru/core.events

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Манипуляция данных до их вывода

Сообщение slavcodev » 2010.11.22, 23:30

Ekstazi писал(а):Где-то я видел onBeforeRender и onAfterRender )
это события CController начиная с версии 1.1.5
но эти события кажется тут не подойдут
Жду Yii 3!

Ответить