Yii 1.1.9

    Вышла стабильная версия PHP-фреймворка 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. Теперь используя тот же самый подход можно перекрыть классы ядра.
    Поделиться публикацией

    Похожие публикации

    Комментарии 38
      +6
      Отличный подарок к Новогому Году, хоть и сложно воспринимать его утром первого января.
        +1
        Это да, а то прям тянутся руки обновить продакшены, если что слетит, то вроде как до числа 3-го ни кто и не заметит.
          +1
          Погоняйте сначала локально… мало ли.
        0
        Спасибо. Осталось удержаться и не начать обновлять всё сейчас, а дать себе отдохнуть.
          0
          Это прекрасная новость утром 1го… раз тут такие замечательные плюшки появились, но сначала надо до конца с коханой разобраться…
            +1
            Лучше сначала салаты доесть :)
              +1
              Тот что от гостей, на ковре, собственного нету) так что все же кохана…
            +1
            'jobs'=>array(self::HAS_MANY, 'Job', array('date' => 'target_date'))
            вот этого реально не хватало иногда, спасибо.
              0
              Я только на днях стал знакомиться с Yii, и отсутствие возможности вот так вот задать индексы меня просто убила (да, я знаю, это проблема дизайна БД, но БД мне такой уже досталась).
                0
                На этот случай и добавили…
              0
              Отличная новость, попробуем.
                0
                Основные изменения только в ActiveRecord :(
                  0
                  Есть какие-нибудь пожелания?
                    0
                    Сжатие asset'ов из коробки. Из глобально-масштабного поддержку HTTP Streaming, например.
                      –1
                      assetы можно сжимать посредствам расширений — насколько я помню есть парочка очень неплохих. По поводу HTTP Streaming из коробки — это довольно специфичная штука, и опять же тут стоит вынести это дело в стороннее расширение. Не помню точно, но вроде бы что-то такое тоже есть.
                        0
                        Ваше предложение — остановить развитие Yii? С такой логикой миграции и все, кроме роутов/AR/шаблонов надо в расширения вынести. Существенную часть extendedclientscript, между прочим, написал автор этих строк :)
                          0
                          Нет, мое предложение — совершенствовать имеющийся функционал, развивать компоненты WEb сервисов, пересмотреть принцыпы для работы с формами, переписать CDbCriteria… там очень много чего что можно допиливать, додумывать, доделывать. Не стоит так экспессивно реагировать. Возможно сжатие и можно внести в состав фреймворка, так как этот функционал востребован, но вот HTTP Streaming — вам никто собственно не мешает реализовать данный функционал и предложить внедрить его в состав фреймворка. Но все же это уже довольно специфичный функционал, не настолько востребованный. Такие вещи следует реализовывать в качестве расширений. А вот в будущем, когда данный функционал будет пользоваться спросом, его можно включить в состав фреймворка. Все меняется со временем, и пытаться охватить все и вся, имея еще огромный TODO список, смысла не имеет, дла этого и придумывались репозитории расширений и прочего. Пока нововведений недопиленый хватает — браться за что-то еще смысла нету.
                            0
                            Извините за ошибки, похмелье…
                  0
                  Будьте осторожны при использовании yiilite.php: он вызывает ошибку при использовании CLocale, а конкретнее ошибка возникает в конструкторе, т.к. при создании экземпляра CLocale путь к данным локали считается от расположения файла, содержащего класс, а для /i18n/CLocale.php и /yiilite.php пути, естественно, разные.
                  Починить просто: удалите код класса CLocale из yiilite.php. На официальном форуме я уже про это написал.
                    0
                    О! А продублировать сюда можно http://code.google.com/p/yii/issues/list? Спасибо.
                      0
                      У меня нет аккаунта на google, поэтому опубликовал в Bug Discussions
                        0
                        Спасибо. Я перепостил в трекер уже.
                          0
                          И вам спасибо!
                          На будующее: куда мне лучше публиковать найденные ошибки — в данный раздел форума, или можно публиковать в соотв. разделе формума на yiiframework.ru по-русски (с английским у меня не очень)? Стоит ли дублировать репорты на форумах? не уверен что хочу регистрироваться в google, с их подтверждениями, использующими мобильник, хотя вот теперь задумался.
                          Будет ли выложена исправленная версия под текущим номером, или исправление будет в следующей версии?
                            0
                            В следующей точно поправим.
                    0
                    >Рассмотрим наиболее интересные изменения.

                    Наиболее интересно посмотреть на тех, кто 1 января что-то релизит :)
                      +1
                      Да нормально выглядим. И отметить успели и релизнуть. Хотя, всё заранее было готово. Подождали переводчиков да нажали на красную кнопку.
                      0
                      >> Возможность сделать JOIN между моделями по заданным ключам
                      >> создание отношений по заданной паре PK->FK не опираясь на схему данных

                      а к чему это? в каком кейзе это крайне полезно (необходимо)?
                        0
                        Бывают кривые БД, которые остаются в наследство. При нормальном проектировании такого, как правило, не бывает.
                          0
                          трудно себе предстовляю кейс когда досталась в наследство структура БД которую нельзя поменять, но проект переписывается с начала с использованием фреймворка.

                          В общем я к тому что эта фича очень «скользкая», теперь как раз таки может появиться достаточное кол-во кода без нормальной структуры бд.

                          Хотя возможно допускаю иногда действительно это может пригодиться.
                            0
                            Вот Вам пример: у меня есть биллинг, создатель которого, судя по всему, не слышал о Foreign Key. Мне для него надо сделать юзерскую морду («личный кабинет»). Вот как раз и пригодилось.
                              0
                              а если добавите FK к существующей базе то код создателя перестанет работать?
                                0
                                И такое бывает.
                              0
                              Например, часто одной базой пользуются несколько приложений. Одно из них уже существовало. Второе — наше. Базу менять нельзя из за обратной совместимости.
                                0
                                правильно ли я понимаю что если воспользоваться этой фичей то ключи могут быть в базе даже разных типов?
                                  0
                                  Да.
                                0
                                Проект переписывается поэтапно, то есть параллельно работают и новые куски, и стареы.
                            0
                            сейчас проверил новый дистрибутив, и удивился его размеру, с читай в половина раза больше стал. Оказывается разбухла директория i18n

                            было
                            3,78 МБ (Файлов: 616; папок: 2)

                            стало
                            11,6 МБ (Файлов: 666; папок: 2)
                              0
                              Тоже обратил на это внимание.
                              Им бы при download'e сделать выбор галочками необходимых языков.

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое