<rmcreative>

RSS

Yii 1.1.9

1 января 2012

Вышла стабильная версия Yii 1.1.9. В данном релизе около 60 улучшений и исправленных ошибок.

Полный список изменений можно посмотреть в соответствующем файле. Перед обновлением с более ранних версий важно ознакомиться с инструкциями.

Русскоязычная документация, как обычно, находится в полностью актуальном состоянии. Кроме того, поправлены все найденные на момент релиза опечатки. Спасибо всем, кто использует Orphus на yiiframework.ru.

Рассмотрим наиболее интересные изменения.

Более удобный способ определения through в отношениях ActiveRecord

Опция though была добавлена в версии 1.1.7, но синтаксис был не слишком удобен, так что было решено сделать его более явным. В текущей версии используется следующий синтаксис:

'comments'=>array(self::HAS_MANY,'Comment',array('key1'=>'key2'),'through'=>'posts'),

В приведённом выше array('key1'=>'key2'):

  • key1 является ключом, определённым в отношении, котрое указано в through (в нашем случае это posts).
  • key2 является ключом, определённым в модели, на которую указывает отношение (в нашем случае это Comment).

through можно использовать как для HAS_ONE, так и для HAS_MANY.

Подробнее данная возможность описана в разделе Реляционная Active Record полного руководства.

Поддержка групп условий в Model::relations()

Теперь можно использовать группы условий при определении отношений модели:

'recentApprovedComments'=>array(self::BELONGS_TO, 'Post', 'post_id', 
    'scopes' => array('approved', 'recent')),

При использовании лишь одной группы условий её можно указать как строку.

Возможность сделать JOIN между моделями по заданным ключам

В данной версии стало возможым создание отношений по заданной паре PK->FK не опираясь на схему данных. Это означает, что можно, например, задать следующее отношение для модели Day:

'jobs'=>array(self::HAS_MANY, 'Job', array('date' => 'target_date')),

В данном случае Day может содержать несколько Jobов. При этом они не связаны привычным образом. Мы задали ключ в виде array('fk'=>'pk'), то есть на выходе мы получим SQL вроде

SELECT * FROM day t
JOIN job ON t.date = job.target_date

Возможность перекрыть классы ядра при помощи Yii::$classMap

Начиная с 1.1.5 в Yii была возможность заранее импортировать классы и использовать их без явного импорта или include. Теперь используя тот же самый подход можно перекрыть классы ядра.

Комментарии RSS

  1. №5730
    Алексей
    Алексей 01 янв. 2012 г., 14:24:53

    Вот вам и с новым годом :-)

    Есть вопрос по changelist'у: Enh: jquery.yiiactiveform.js added check for form visibility to validate() to prevent JS error when using CActiveForm with jQuery dialog (mdomba)

    Это значит, что если форма не видима, то.... что это значит?

  2. №5731
    Sam
    Sam 01 янв. 2012 г., 14:46:17

    Исправили ошибку при валидации скрытой формы (которая для диалога отренедерена).

  3. №5732
    Алексей
    Алексей 01 янв. 2012 г., 15:36:03

    А, т.е. это не изменение, а просто ошибку закрыли?

  4. №5733
    Sam
    Sam 01 янв. 2012 г., 15:51:59

    Да.

  5. №5734
    Serge Bezborodov
    Serge Bezborodov 01 янв. 2012 г., 20:10:44

    Всем привет, где можно посмотреть пример правильного использования переопределения классов через classMap?

  6. №5735
    resurtm
    resurtm 01 янв. 2012 г., 20:53:56

    Вот через этот атрибут класса YiiBase: http://code.google.com/p/yii/source/browse/trunk/framework/YiiBase.php#58

    Описано здесь как использовать $classMap: http://www.yiiframework.com/doc/guide/1.1/ru/basics.namespace#sec-3

    Т.е. получится нечто вроде:

    Yii::$classMap=array(
    'CApcCache'=>Yii::getPathOfAlias('application.components').'/CApcCache.php',
    );

    Вот коммит: http://code.google.com/p/yii/source/detail?r=3398

    Там видно, что раньше $_coreClasses имели приоритет выше, чем $classMap, а теперь наоборот. Что и дало возможность переопределять core-классы.

  7. №5746
    White-Shadow
    White-Shadow 10 янв. 2012 г., 17:35:07

    может странный вопрос, но всеже: как правильно произносить Yii?

  8. №5753
    Sam
    Sam 12 янв. 2012 г., 12:26:52

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

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.