Страница 1 из 2
Геттеры и сеттеры в Yii
Добавлено: 2009.07.07, 11:20
samdark
В большинстве классов Yii, наследуемых от
CComponent (среди них модель и контроллер), поведение несколько отличается от стандартного PHP и похоже больше на свойства C#.
Код: Выделить всё
class MyModel extends CModel {
function getReadwrite(){
//…
}
function setReadwrite(){
//…
}
function getReadonly(){
//…
}
function setWriteonly(){
//…
}
}
Такой класс определяет три свойства: readwrite, readonly и writeonly:
Код: Выделить всё
$model = new MyModel();
$model->readwrite = 'мы можем сюда писать';
//и читать
echo $model->readwrite;
//отсюда можно тоько читать
echo $model->readonly;
$model->writeonly = 'а сюда только писать';
Re: Геттеры и сеттеры в Yii
Добавлено: 2009.10.26, 15:08
aser
На сайте в рецепте в коде класса не хватает
Думаю он там не помешает...
Re: Геттеры и сеттеры в Yii
Добавлено: 2009.10.27, 20:00
samdark
Спасибо, исправил.
Re: Геттеры и сеттеры в Yii
Добавлено: 2010.09.13, 17:56
BuCeFaL
нужно ли объявлять само свойство и что именно находиться в теле метода ?
Re: Геттеры и сеттеры в Yii
Добавлено: 2010.09.13, 22:13
samdark
Само свойство не обязательно. В теле всё что угодно… главное в геттере что-то вернуть, а в сеттере присвоить чему-то значение.
Re: Геттеры и сеттеры в Yii
Добавлено: 2010.09.14, 10:20
BuCeFaL
Спасибо.
Re: Геттеры и сеттеры в Yii
Добавлено: 2011.12.09, 10:41
Darth_Ixis
В модели таблицы(AR) у меня есть поле "name".
Если я создаю public function getName(), то при вызове $model->name getName() не срабатывает.
Так и должно быть?
Re: Геттеры и сеттеры в Yii
Добавлено: 2011.12.09, 10:50
slavcodev
Да. геттер и сеттер работают только если в классе нет одноименных свойств.
Re: Геттеры и сеттеры в Yii
Добавлено: 2011.12.09, 12:37
Wallhatt
Darth_Ixis писал(а):В модели таблицы(AR) у меня есть поле "name".
Если я создаю public function getName(), то при вызове $model->name getName() не срабатывает.
Так и должно быть?
Геттеры и сеттеры реализованы через магические методы PHP __get() и __set(), которые вызываются только в том случае, если происходит обращение к несуществующему свойству класса. Если же свойство существует, то методы не вызываются. В реализации Yii в этих методах проверяется наличие соответствующих геттеров и зеттеров, например, getName() и setName().
Re: Геттеры и сеттеры в Yii
Добавлено: 2011.12.09, 17:04
esche
можно переопределить __get() непосредственно в модели и добавить обработку существующего свойства (name, например), хотя, пожалуй, не самое хорошее решение
Re: Геттеры и сеттеры в Yii
Добавлено: 2011.12.09, 19:27
Wallhatt
esche писал(а):можно переопределить __get() непосредственно в модели и добавить обработку существующего свойства (name, например), хотя, пожалуй, не самое хорошее решение
Обработку несуществующего свойства можно определить путем определения соответствующего геттера и зеттера. Для чего трогать __get() ?
Re: Геттеры и сеттеры в Yii
Добавлено: 2011.12.11, 09:56
esche
Wallhatt писал(а):esche писал(а):можно переопределить __get() непосредственно в модели и добавить обработку существующего свойства (name, например), хотя, пожалуй, не самое хорошее решение
Обработку несуществующего свойства можно определить путем определения соответствующего геттера и зеттера. Для чего трогать __get() ?
Я вроде про существующее...
Re: Геттеры и сеттеры в Yii
Добавлено: 2012.01.27, 15:17
sliderbook
Проблемка:
есть
Код: Выделить всё
...
public function getData() {
return $this->_data;
}
...
и хотим сделать
т.к. сначала будет вызван __get то присвоение не произойдет
как тут быть?
Re: Геттеры и сеттеры в Yii
Добавлено: 2012.01.27, 16:22
samdark
Можно попробовать вернуть массив по ссылке.
Re: Геттеры и сеттеры в Yii
Добавлено: 2012.04.21, 11:09
vasilyev.dmitro
можно поподробнее пожалуйста. Куда и что отправлять по ссылке?
Уже мозг сломал, но
не хочет отрабатывать, хоть и
getParam возвращает массив (пустой или заполненный)
Re: Геттеры и сеттеры в Yii
Добавлено: 2012.07.09, 10:32
Dr0ID
Очень странное поведение для AR, если внезапно встает потребность самоинкапсулировать поле, то сделать это без костылей не получится, тогда как для CModel все ок. Где логика?
Re: Геттеры и сеттеры в Yii
Добавлено: 2012.07.09, 10:35
Dr0ID
Самое главное, не очень понятно почему существование колонки-атрибута в метаданных приоритетнее?
Re: Геттеры и сеттеры в Yii
Добавлено: 2012.07.09, 13:56
samdark
По мне так это недоработка. Закидывайте в issue на github. Есть все шанся поменять данное поведение.
Re: Геттеры и сеттеры в Yii
Добавлено: 2012.11.11, 06:27
com
почему-то у read-write атрибута не происходит автоматическое присваивание значения в контроллере
имеем модель XUser, в ней методы
Код: Выделить всё
public function getselectedroles() {
...
return $selectedroles;
}
public function setselectedroles($sr) {
...
}
в методе контроллера, когда получаем данные из представления
присваивает все атрибуты, кроме selectedroles, а для него надо явно написать дополнительно
Код: Выделить всё
$user->selectedroles = $_POST['XUser']['selectedroles'];
это баг или фича?
Re: Геттеры и сеттеры в Yii
Добавлено: 2012.11.11, 12:59
slavcodev
а selectedroles безопасный?