8,5
рейтинг
14 июля 2013 в 22:34

Разработка → Yii 1.1.14 RC

Yii*
Вышел кандидат в релизы 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(): генерирует случайную строку. Криптостойкость задаётся вторым аргументом.
Стоит отметить, что генерация довольно медленная.
Александр Макаров @SamDark
карма
281,4
рейтинг 8,5
PHP, Yii
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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 чтобы названия полей генерировались из комментариев к полю, да только руки не доходили, а тут бац и из коробки. Спасибо.

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