Yii 1.1.14 RC

    Вышел кандидат в релизы PHP фреймворка Yii 1.1.14. Забрать можно с GitHub.

    Исправлены более 80 ошибок, добавлено более 60 небольших улучшений и новых возможностей. Появился новый класс
    CPasswordHelper, который предоставляет надёжный метод хранения и проверки хешей паролей. Также добавлен CRedisCache,
    с помощью которого можно использовать Redis для хранений кеша. Yii может быть установлен как
    пакет Composer. Полный список изменений дан
    в changelog.

    Значительную часть изменений сделали члены сообщества: creocoder, tom--, paystey, Ragazzo, antoncpu, Yiivgeny и другие,
    за что им огромное спасибо.

    Так как это кандидат в релизы (RC), не стоит использовать его на боевых серверах. Стабильный релиз 1.1.14 будет доступен в
    течение нескольких недель, а пока мы будем очень признательны, если вы проверите RC и
    сообщите нам об ошибках
    . Заранее спасибо.

    Ну а теперь рассмотрим главные улучшения.



    Новый класс CPasswordHelper



    CPasswordHelper предоставляет надёжный метод хранения и проверки хешей паролей. Использовать его очень просто:

    // генерируем хеш, который затем будет сохранён в БД. $password приходит из формы регистрации
    $hash = CPasswordHelper::hashPassword($password);
    
    // $hash — это то, что мы сохраняли в БД, $password приходит из формы логина
    if (CPasswordHelper::verifyPassword($password, $hash)
      // всё хорошо
    else
      // неправильный пароль
    


    Новый метод CDbCommandBuilder::createMultipleInsertCommand()



    При помощи CDbCommandBuilder::createMultipleInsertCommand() стало возможным вставить несколько записей за один запрос:

    $builder=Yii::app()->db->schema->commandBuilder;
    $command=$builder->createMultipleInsertCommand('tbl_post', array(
      array('title' => 'record 1', 'text' => 'text1'),
      array('title' => 'record 2', 'text' => 'text2'),
    ));
    $command->execute();
    


    CRedisCache



    Теперь приложение можно сконфигурировать для хранения кеша в Redis. Делается через `protected/config/main.php`:

    array(
      // ...
      'components'=>array(
        'cache'=>array(
          'class'=>'CRedisCache',
          'hostname'=>'localhost',
          'port'=>6379,
          'database'=>0,
        ),
      ),
    )
    


    Установка Yii как пакет Composer:



    Yii теперь можно установить через Composer. Для этого необходимо добавить
    следующее в composer.json.

    "yiisoft/yii": "dev-master"
    


    Автоматический выход пользователя после определённого времени



    Если вам необходимо, чтобы пользователь вышел через строго определённое время вне зависимости от его активности, сделать это
    можно так:

      // ...
      'components'=>array(
        'user'=>array(
          // ...
          'absoluteAuthTimeout' => 60*60*24;
        ),
      ),
    )
    


    Поддержка RANGE при отдаче файлов



    При использовании CHttpRequest::sendFile Yii теперь верно отвечает на RANGE запросы, то есть конечный пользователь
    получает большую скорость при скачивании в несколько потоков.

    Использование through с BELONGS_TO



    Опция «through» теперь может использоваться с CActiveRecord::BELONGS_TO. Подробнее об этом
    написано в полном руководстве.

    Выборочное логирование глобальных переменных



    CLogFilter::$logVars теперь принимает массив массивов, в котором можно указать, что именно логировать из $GLOBALS:

    	'components'=>array(
    		'log'=>array(
    			'class'=>'CLogRouter',
    			'routes'=>array(
    				array(
    					'class'=>'system.logging.CWebLogRoute',
    					'filter'=>array(
    						'class'=>'system.logging.CLogFilter',
    						'logVars'=>array(
    							'_COOKIE', // старый синтаксис, < 1.1.14
    							array('_SERVER','REMOTE_ADDR'), // новый синтаксис, >= 1.1.14
    							array('_SERVER','HTTP_USER_AGENT'), // новый синтаксис, >= 1.1.14
    						),
    					),
    				),
    			),
    		),
    	),
    


    Приведённая выше конфигурация даст в логе следующее:

    $_COOKIE=array (
      '__utma' => '111872281.473431406.1366046648.1366046648.1366046648.1',
      '__utmz' => '111872281.1366046648.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)',
      'cartVisible' => '1',
      '96ab4aec0c2977c9b793d4ba009eb3ce' => '...',
      'PHPSESSID' => 'vb8pk7obs3q2lc7bl8ield7si7',
    )
    
    $_SERVER.REMOTE_ADDR='::1'
    
    $_SERVER.HTTP_USER_AGENT='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0'
    


    Новый CLocalizedFormatter



    Новый класс CLocalizedFormatter позволяет форматировать значения в соответствии с текущей локалью:

    'components'=>array(
    	'format'=>array(
    		'class'=>'system.utils.CLocalizedFormatter',
    		'locale'=>'en_US',
    	),
    	'germanFormat'=>array(
    		'class'=>'system.utils.CLocalizedFormatter',
    		'locale'=>'de_DE',
    	),
    	'russianFormat'=>array(
    		'class'=>'system.utils.CLocalizedFormatter',
    		'locale'=>'ru_RU',
    	),
    ),
    
    


    echo Yii::app()->format->formatDatetime(time()) . "\n";
    echo Yii::app()->germanFormat->formatDatetime(time()) . "\n";
    echo Yii::app()->russianFormat->formatDatetime(time()) . "\n";
    
    // Jul 7, 2013 9:34:56 PM
    // 07.07.2013 21:34:56
    // 07.07.2013, 21:34:56
    


    Генерация названий полей из комментариев БД



    Gii теперь может использовать комментарии к полям таблицы в качестве названий полей генерируемой модели. К примеру,
    если таблицу создать следующим образом:

    CREATE TABLE `tbl_user` (
      `id`  int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(100) NOT NULL COMMENT 'Имя:',
      `last_name` varchar(100) NOT NULL COMMENT 'Nachname:',
      `title` varchar(50) NOT NULL COMMENT 'Title (e.g. Mr., Mrs., etc.):',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1;
    


    То сгенерированный метод attributeLabels будет следующим (если выбрать «Use Column Comments as Attribute Labels» в Gii):

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
    	return array(
    		'id' => 'ID',
    		'first_name' => 'Имя:',
    		'last_name' => 'Nachname:',
    		'title' => 'Title (e.g. Mr., Mrs., etc.):',
    	);
    }
    
    


    Новые методы в CSecurityManager



    В CSecurityManager добавлены:

    * CSecurityManager::generateSessionRandomBlock(): генерирует случайную последовательность байт на основе текущей сессии
    пользователя.
    * CSecurityManager::generatePseudoRandomBlock(): улучшенная альтернатива mt_rand().
    * CSecurityManager::generateRandomBytes(): генерирует случайные бинарные данные. Криптостойкость задаётся вторым
    аргументом. Стоит отметить, что генерация довольно медленная.
    * CSecurityManager::generateRandomString(): генерирует случайную строку. Криптостойкость задаётся вторым аргументом.
    Стоит отметить, что генерация довольно медленная.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 13
    • +1
      Отличное обновление! Хочется уже сразу все новое пустить в дело
      • –2
        Да, спасибо! Это лучшая новость в понедельник с утра.
        Может быть, сделать для паролей Behavior? По типу CTimestampBehavior. Примете пулл-реквест?
      • +1
        Ой как классно. Все новинки по делу — без золочения продукта. Спасибо!
        • 0
          а эти вещи будут применены в yii2?
          • 0
            Да, почти всё портируется в Yii2.
          • 0
            Спасибо за проделанную работу! Только не увидел в документации примера through с BELONGS_TO, там до сих пор «Can be set only for HAS_ONE and HAS_MANY.». Видимо, документация еще не обновлена?
          • 0
            Собираетесь делать обёртку для createMultipleInsertCommand в CDbMigration, или можно начинать делать pull-request? :)
          • 0
            Спасибо, отличная новость.
            • 0
              Круто, давно хотел написать шаблоны для Gii чтобы названия полей генерировались из комментариев к полю, да только руки не доходили, а тут бац и из коробки. Спасибо.

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