Yii 1.1.16

    Вышел релиз 1.1.16 PHP-фреймворка Yii. Вы можете скачать его по адресу yiiframework.com/download/.

    В данный релиз вошло более 120 улучшений и исправлений. Полный список изменений можно посмотреть здесь. Внимание: не все изменения совместимы с предыдущей версией. Внимательно прочитайте инструкции по обновлению.

    Спасибо всем, кто нам помогал и без кого этот релиз бы не состоялся.

    Отметим, что Yii 1.1 перешёл в режим поддержки, то есть не стоит ждать каких-либо новых возможностей или больших изменений в будущем. В данный момент мы активно разрабатываем и поддерживаем Yii 2.0, в котором используются свежие технологии. Следить за развитием Yii 2 можно поставив звёздочку или нажав на кнопку «watch» на странице проекта на GitHub. Присоединяйтесь к нашим Twitter и Facebook.

    Далее мы расскажем о главных улучшениях.



    База данных и ActiveRecord



    Поддержка баз данных улучшается постоянно. На этот раз мы добавили поддержку MariaDB и CUBRID.

    ODBC теперь можно использовать через pdo_odbc:

    'components'=>array(
        ......
        'db'=>array(
            'class'=>'CDbConnection'
            'driverName'=>'mysql',
            'connectionString'=>'odbc:Driver={MySQL};Server=127.0.0.1;Database=test',
            'username'=>'',
            'password'=>'',
        ),
    ),
    


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

    public function relations()
    {
        return array(
            'recentPostCount'=>array(self::STAT,'Post','author_id','scopes'=>'recentScope'),
        );
    }
    


    Теперь в реляционных запросах можно задать операции, применяемые после JOIN (то есть use|force|ignore index()):

    $users=User::model()->findAll(array(
        'select'=>'t.id,t.name',
        'with'=>array(
            'posts'=>array(
                'alias'=>'p',
                'select'=>'p.id,p.title',
                'joinOptions'=>'USE INDEX(post__user)',
            ),
        ),
    ));
    


    Подробнее можно почитать в разделе «Post-JOIN operations» в главе «Relational Active Record» полного руководства.

    Были добавлены CDbCommand::naturalLeftJoin() и CDbCommand::naturalRightJoin(), которые позволяют использовать соответствующие типы join.

    Стало возможным перекрыть первичный ключ модели через метод primaryKey() даже в том случае, если в таблице есть первичный ключ.

    Файлы



    В CFileHelper добавлены новые методы:

    • createDirectory() — создаёт директорию, выставляя рекурсивно права.
    • getExtensionByMimeType() — определяет расширение файла по типу MIME.


    Определение MIME типа было улучшено использованием файла mime.types из Apache HTTP.

    CFileHelper::removeDirectory() теперь нормально работает с символическими ссылками на директории. Сделать «как было» можно передав ключ traverseSymlinks со значением false в массиве опций.

    В CFileHelper::findFiles() добавлена новая опция absolutePaths. Если её выставить в
    true, метод будет возвращать абсолютные пути. true является значением по умолчанию.

    В CFileCache добавлены свойства cachePathMode и cacheFileMode, которые могут быть использованы для выполнения chmod() соответствующих директорий.

    Обновления



    Несколько библиотек, используемых фреймворком, были обновлены:

    • jQuery до 1.11.1.
    • jQuery UI до 1.11.2.
    • Плагин Multifile, используемый CMultiFileUpload до 1.48.
    • HTMLPurifier до 4.6.0.
    • Данные для i18n до CLDR23.1, в которой были добавлены новые локали, больше данных и есть важные исправления.


    HTML5



    Когда мы выпустили первую версию Yii 1.1, фактическим стандартом разметки был XHTML. Теперь же
    это HTML5, поэтому мы решили обновить шаблон приложения, генерируемый при помощи yiic webapp до HTML5.

    CHtml и CActiveForm получили поддержку полей ввода HTML5, таких как color, datetime, datetime-local, week и search.

    Совместимость



    Различные инструменты и библиотеки, часто используемые с Yii, были обновлены, так что мы обновили фреймворк для их поддержки.

    • CApcCache теперь совместим с APCu.
    • Yii::import() и Yii::createComponent() теперь совместимы со сторонними автозагрузчиками классов, такими как загрузчик Composer.
    • Yii и YiiBase были добавлены в автозагрузку в composer.json.
    • Тесты теперь нормально работают с PHPUnit 3.8+.


    Request



    Request научился работать с заголовком X-HTTP-Method-Override, используемым для эмуляции различных типов запроса через POST.

    Новые методы getIsPatchRequest(), getIsPatchViaPostRequest() и getPatch() позволяют работать с запросами типа PATCH.

    Фреймворк теперь отвечает с той же версией протокола HTTP, которая содержалась в запросе.

    Request::getPreferredLanguage() теперь может выбирать лучший вариант в зависимости от поддерживаемых и запрашиваемых языков.

    Обработка ошибок



    Обработка ошибок была улучшена.

    • Объект исключения теперь доступен через ErrorHandler::getException(), что делает возможным его передачу различным сторонним API.
    • Добавлена поддержка записи логов в Syslog.
    • CClientScript теперь кидает исключение, если вы пытаетесь зарегистрировать несуществующий пакет.
    • В CActiveForm::$clientOptions добавлен errorCallback. Теперь вы можете вклиниться в процесс клиентской валидации.


    И ещё немного



    • В веб-сервисы добавлена поддержка заголовков SOAP и кодирование document/literal.
    • CJSON теперь умеет использовать JsonSerializable.
    • CHtml::beginForm() научился работать с дополнительными методами HTTP через скрытое поле _method.
    • CPasswordHelper::generateSalt() теперь возвращает соль с cost = $2y$.
    CFormatter научился работать с DateTime.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 20
    • +2
      Меня всегда удивляло, что субминорная (третья) цифра в версионировании Yii1 частенько ломает обратную совместимость :-)

      А вообще, хороший фреймворк, много мной на нём было написано: от больших проектов до черновиков за одну ночь.
      Спасибо большое разработчикам.

      Сейчас всем рекомендую пользоваться Yii2. Он ещё лучше.
      • 0
        Так уж повелось. В Yii 2.0 мы относимся к этому более серьёзно :)
        • –1
          В вашем блоге уже писали об этом, внесу еще одну порцию нытья:
          Выбросьте Bootstrap из базового Yii2 приложения!
          • +2
            зачем? базовое приложение создано для демонстрации возможной структуры приложения. Грех в демо не воспользоваться чем-то готовым.
            • 0
              Но не для демонстрации бутстрапа.
              • +1
                бутстрап не нужно демонстрировать — это инструмент. именно как инструмент он и использован.
            • +2
              Не пойму чем он вам мешает. Любите другую CSS библиотечку вроде Foundation, пользуйтесь на здоровье. Не хотите подключать Bootstrap, отключите его в AppAsset.php, делов на 2 секунды…
              • +1
        • +3
          Всегда приятно, когда разработчики не «забивают» на старые версии продуктов. Спасибо!
          • +1
            Друзья, а это нормально, что на github'e в 1.1.16-branch у вас лежит 1.1.15, а в master – 1.1.17dev? Нет, правда, я не в курсе.
            • 0
              Уже грохнул 1.1.16-branch.
            • 0
              Тут уже 1.1.17 вдруг
              www.yiiframework.com/doc/api/1.1/CGridView#renderDataCell-detail
              available since v1.1.17
            • 0
              Composer и PHPUnit. Отличная новость!
              • +5
                То чувство, когда старые проекты перевести на Yii 2.0 нет возможности, а на 1.1.16 страшно ;D
                • 0
                  — The possibility to use callables for values of CDetailView introduced a problem with string being interpreted as
                  PHP functions. CDetailView now only allows anonymous functions to be called, all other values will be taken as value.

                  Правильно ли я понял, что если в версии до 1.1.16 написать в параметрах CDetailView написать 'value' => 'trim($data->value)', то trim сработает? Теперь эта возможность заблокирована, но, я надеюсь, это никак не касается случаев, когда мы пишем 'value' => trim($data->value)?
                  • 0
                    Естественно никак не коснётся. То, что вы делаете непосредственно с значением перед его использованием — ваше дело.

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