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. Теперь используя тот же самый подход можно перекрыть классы ядра.
    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 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 сделать выбор галочками необходимых языков.

                            Only users with full accounts can post comments. Log in, please.