<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.yiiframework.ru/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	<channel>
		<title><![CDATA[YiiFramework.ru]]></title>
		<link>http://yiiframework.ru</link>
		
		<description>Новости Yii Framework</description>
		<language>ru</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<managingEditor>sam@rmcreative.ru (Alexander Makarov)</managingEditor>
		<webMaster>sam@rmcreative.ru (Alexander Makarov)</webMaster>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.yiiframework.ru/Yiiframeworkru" /><feedburner:info uri="yiiframeworkru" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
			<title><![CDATA[YiiTalk, эпизод 4]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/h0-ltZilky4/yiitalk,-epizod-4</link>
			<description>&lt;p&gt;Эпизоды подкаста про Yii — YiiTalk выходят как горячие пирожки. Участвуют &lt;a href="http://belyakov.su/" title=""&gt;Юрий Беляков&lt;/a&gt; и Максим Фуртуна, известный сообществу как Ekstazi.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://yiitalk.rpod.ru/263953.html" title=""&gt;Слушаем на rpod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yiitalk.podfm.ru/my/4/" title=""&gt;Слушаем на podfm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://belyakov.su/content/yiitalk-episode-04" title=""&gt;Оставляем отзывы в блоге ведущего&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/h0-ltZilky4" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/yiitalk,-epizod-4</guid>
			<pubDate>Tue, 21 Feb 2012 17:12:28 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/yiitalk,-epizod-4</feedburner:origLink></item>
		<item>
			<title><![CDATA[YiiTalk, эпизод 3]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/b7weD7wdrW0/yiitalk,-epizod-3</link>
			<description>&lt;p&gt;И ещё один выпуск подкаста про Yii — YiiTalk. Участвуют &lt;a href="http://belyakov.su/" title=""&gt;Юрий Беляков&lt;/a&gt; и &lt;a href="http://devkp.ru/" title=""&gt;Константин Перминов&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://yiitalk.rpod.ru/263571.html" title=""&gt;Слушаем на rpod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yiitalk.podfm.ru/my/3/" title=""&gt;Слушаем на podfm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/b7weD7wdrW0" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/yiitalk,-epizod-3</guid>
			<pubDate>Fri, 17 Feb 2012 20:20:13 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/yiitalk,-epizod-3</feedburner:origLink></item>
		<item>
			<title><![CDATA[Yii переехал на GitHub]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/RhurcZOXzMQ/yii-pereekhal-na-github</link>
			<description>&lt;p&gt;Yii официально целиком и полностью переехал &lt;a href="https://github.com/yiisoft/yii" title=""&gt;на GitHub&lt;/a&gt;. Перенесён весь код с полной историей, а также &lt;a href="https://github.com/yiisoft/yii/issues" title=""&gt;трекер со всеми тикетами&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Очень многие об этом просили и команда Yii думает, что это верный ход, который позволит сообществу в полной мере участвовать в разработке фреймворка и ускорить темпы его развития.&lt;/p&gt;

&lt;p&gt;Все кто использует SVN могут не волноваться. Ничего не отвалится. Код будет синхронизоваться с SVN каждые сутки.&lt;/p&gt;

&lt;p&gt;p.s. если что-то прошло не совсем гладко и вы это заметили, не стесняйтесь, пишите.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/RhurcZOXzMQ" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/yii-pereekhal-na-github</guid>
			<pubDate>Wed, 15 Feb 2012 20:35:56 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/yii-pereekhal-na-github</feedburner:origLink></item>
		<item>
			<title><![CDATA[Yii 1.1.10]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/uJJ5unustMo/yii-1.1.10</link>
			<description>&lt;p&gt;Вышел релиз 1.1.10. В данной версии, в основном, исправлены ошибки в &lt;code&gt;CActiveForm&lt;/code&gt;, &lt;code&gt;CJuiDatePicker&lt;/code&gt; и невозможность запуска с &lt;code&gt;yiilite.php&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.yiiframework.com/files/CHANGELOG-1.1.10.txt" title=""&gt;Полный список изменений&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yiiframework.com/download/" title=""&gt;Обновляемся&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/uJJ5unustMo" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/yii-1.1.10</guid>
			<pubDate>Mon, 13 Feb 2012 09:11:22 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/yii-1.1.10</feedburner:origLink></item>
		<item>
			<title><![CDATA[YiiTalk, эпизод 2]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/c8Wx6zn6iVQ/yiitalk,-epizod-2</link>
			<description>&lt;p&gt;Вышел первый полноценный эпизод YiiTalk, русскоязычного подкаста про Yii.&lt;/p&gt;

&lt;p&gt;В гостях разработчик ядра Yii Александр Макаров, известный также под ником SamDark. Говорим об Александре, Yii и программировании в целом.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://yiitalk.podfm.ru/my/2/" title=""&gt;Слушаем на podfm&lt;/a&gt; или &lt;a href="http://yiitalk.rpod.ru/" title=""&gt;на rpod&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/c8Wx6zn6iVQ" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/yiitalk,-epizod-2</guid>
			<pubDate>Tue, 24 Jan 2012 19:44:24 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/yiitalk,-epizod-2</feedburner:origLink></item>
		<item>
			<title><![CDATA[Yii 1.1.9]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/Jc7aWhnCFwc/yii-1.1.9</link>
			<description>&lt;p&gt;Вышла стабильная версия Yii 1.1.9. В данном релизе около 60 улучшений и исправленных ошибок.&lt;/p&gt;

&lt;p&gt;Полный список изменений можно посмотреть &lt;a href="http://www.yiiframework.com/files/CHANGELOG-1.1.9.txt"&gt;в соответствующем файле&lt;/a&gt;. Перед обновлением с более ранних версий важно &lt;a href="http://www.yiiframework.com/files/UPGRADE-1.1.9.txt"&gt;ознакомиться с инструкциями&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Русскоязычная документация, как обычно, находится в полностью актуальном состоянии. Кроме того, поправлены все найденные на момент релиза опечатки. Спасибо всем, кто использует Orphus на yiiframework.ru.&lt;/p&gt;

&lt;p&gt;Рассмотрим наиболее интересные изменения.&lt;/p&gt;

&lt;h3&gt;Более удобный способ определения &lt;code&gt;through&lt;/code&gt; в отношениях ActiveRecord&lt;/h3&gt;

&lt;p&gt;Опция &lt;code&gt;though&lt;/code&gt; была добавлена в версии 1.1.7, но синтаксис был не слишком удобен, так что было решено сделать его более явным. В текущей версии используется следующий синтаксис:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;comments&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;self&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;HAS_MANY&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;Comment&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;key1&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;key2&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;through&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;posts&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;В приведённом выше &lt;code&gt;array('key1'=&amp;gt;'key2')&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;code&gt;key1&lt;/code&gt; является ключом, определённым в отношении, котрое указано в &lt;code&gt;through&lt;/code&gt; (в нашем случае это &lt;code&gt;posts&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;key2&lt;/code&gt; является ключом, определённым в модели, на которую указывает отношение (в нашем случае это &lt;code&gt;Comment&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;code&gt;through&lt;/code&gt; можно использовать как для &lt;code&gt;HAS_ONE&lt;/code&gt;, так и для &lt;code&gt;HAS_MANY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Подробнее данная возможность описана в разделе &lt;a href="http://yiiframework.ru/doc/guide/ru/database.arr"&gt;Реляционная Active Record&lt;/a&gt; полного руководства.&lt;/p&gt;

&lt;h3&gt;Поддержка групп условий в Model::relations()&lt;/h3&gt;

&lt;p&gt;Теперь можно использовать группы условий при определении отношений модели:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;recentApprovedComments&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;self&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;BELONGS_TO&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;Post&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;post_id&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, 
    &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;scopes&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;approved&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;recent&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;При использовании лишь одной группы условий её можно указать как строку.&lt;/p&gt;

&lt;h3&gt;Возможность сделать JOIN между моделями по заданным ключам&lt;/h3&gt;

&lt;p&gt;В данной версии стало возможым создание отношений по заданной паре PK-&amp;gt;FK не опираясь на схему данных. Это означает, что можно, например, задать следующее отношение для модели &lt;code&gt;Day&lt;/code&gt;:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;jobs&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;self&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;HAS_MANY&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;Job&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;date&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;target_date&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;В данном случае &lt;code&gt;Day&lt;/code&gt; может содержать несколько &lt;code&gt;Job&lt;/code&gt;ов. При этом они не связаны привычным образом. Мы задали ключ в виде &lt;code&gt;array('fk'=&amp;gt;'pk')&lt;/code&gt;, то есть на выходе мы получим SQL вроде&lt;/p&gt;

&lt;pre&gt;SELECT * FROM day t
JOIN job ON t.date = job.target_date
&lt;/pre&gt;

&lt;h3&gt;Возможность перекрыть классы ядра при помощи Yii::$classMap&lt;/h3&gt;

&lt;p&gt;Начиная с 1.1.5 в Yii была возможность &lt;a href="http://yiiframework.ru/doc/guide/ru/basics.namespace"&gt;заранее импортировать классы&lt;/a&gt; и использовать их без явного импорта или &lt;code&gt;include&lt;/code&gt;. Теперь используя тот же самый подход можно перекрыть &lt;a href="http://code.google.com/p/yii/source/browse/trunk/framework/YiiBase.php#632"&gt;классы ядра&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/Jc7aWhnCFwc" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/yii-1.1.9</guid>
			<pubDate>Sun, 01 Jan 2012 05:08:37 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/yii-1.1.9</feedburner:origLink></item>
		<item>
			<title><![CDATA[Обновлены архивы расширений yiiext]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/QcIYmgm0_xc/obnovleny-arkhivy-rasshchireniy-yiiext</link>
			<description>&lt;p&gt;Обновлены следующие расширения:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;activeFormValidation 0.4&lt;/li&gt;
&lt;li&gt;blueprint 0.2&lt;/li&gt;
&lt;li&gt;ensureNull 1.0.1&lt;/li&gt;
&lt;li&gt;fileUpload 0.3&lt;/li&gt;
&lt;li&gt;form 0.5&lt;/li&gt;
&lt;li&gt;imperaviRedactor 0.3&lt;/li&gt;
&lt;li&gt;smarty 0.9.9&lt;/li&gt;
&lt;li&gt;taggable 1.5&lt;/li&gt;
&lt;li&gt;trees 1.4&lt;/li&gt;
&lt;li&gt;twig 0.9.4&lt;/li&gt;
&lt;li&gt;zendAutoloader 1.1.1&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://code.google.com/p/yiiext/"&gt;Обновляемся&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/QcIYmgm0_xc" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/obnovleny-arkhivy-rasshchireniy-yiiext</guid>
			<pubDate>Sat, 23 Jul 2011 12:48:14 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/obnovleny-arkhivy-rasshchireniy-yiiext</feedburner:origLink></item>
		<item>
			<title><![CDATA[CHM-версии документации для 1.1.8]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/jRIvyh5iLQ0/chm-versii-dokumentatsii-dlja-1.1.8</link>
			<description>&lt;ul&gt;&lt;li&gt;&lt;a href="http://yiiframework.ru/files/chm/yii-guide-ru.chm.zip"&gt;Полное руководство&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yiiframework.ru/files/chm/yii-blog-ru.chm.zip"&gt;Создание блога&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yiiframework.ru/files/chm/yii-cookbook-ru.chm.zip"&gt;Рецепты&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Оформление документа и ошибки можно &lt;a href="http://yiiframework.ru/forum/viewtopic.php?f=13&amp;amp;t=1352"&gt;обсудить на форуме&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/jRIvyh5iLQ0" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/chm-versii-dokumentatsii-dlja-1.1.8</guid>
			<pubDate>Sun, 26 Jun 2011 21:08:52 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/chm-versii-dokumentatsii-dlja-1.1.8</feedburner:origLink></item>
		<item>
			<title><![CDATA[Yii 1.1.8]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/LfFPQdefHNU/yii-1.1.8</link>
			<description>&lt;p&gt;Вышел релиз Yii 1.1.8, включающий более 80 багфиксов, новых возможностей и улучшений. Огромное спасибо тем, кто репортил баги, предлагал новые фичи и использовал по назначению Orphus на &lt;a href="http://yiiframework.ru/"&gt;yiiframework.ru&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Забрать свежий дистрибутив можно &lt;a href="http://www.yiiframework.com/download/"&gt;с официального сайта&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Инструкции по обновлению можно почитать в &lt;a href="http://www.yiiframework.com/files/UPGRADE-1.1.8.txt"&gt;UPGRADE&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Полный список изменений, как обычно, можно прочитать в &lt;a href="http://www.yiiframework.com/files/CHANGELOG-1.1.8.txt"&gt;CHANGELOG&lt;/a&gt;, мы же бегло рассмотрим самое интересное.&lt;/p&gt;

&lt;h3&gt;Свои классы для правил URL&lt;/h3&gt;

&lt;p&gt;Для сложной работы с URL, с которой не может справится стандартный класс &lt;code&gt;CUrlRule&lt;/code&gt; (например, когда часть URL зависит от значений в базе данных), можно написать свои классы для обработки URL и использовать их в конфигурации &lt;code&gt;CUrlManager&lt;/code&gt;:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
    &lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; стандартное правило '/login' → 'site/login' и т.д.&lt;/span&gt;
    &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;&amp;lt;action:(login|logout|about)&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;site/&amp;lt;action&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
 
    &lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; нестандартное правило для '/Производитель/Модель'&lt;/span&gt;
    &lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
        &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;class&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;application.components.CarUrlRule&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
        &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;connectionID&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;db&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
    &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
 
    &lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; стандартное правило для 'post/update'&lt;/span&gt;
    &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;&amp;lt;controller:\w+&amp;gt;/&amp;lt;action:\w+&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;&amp;lt;controller&amp;gt;/&amp;lt;action&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Сам класс при этом наследуется от &lt;code&gt;CBaseUrlRule&lt;/code&gt; и выглядит примерно так:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-reserved"&gt;class&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;CarUrlRule&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;extends&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;CBaseUrlRule&lt;/span&gt;
&lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
    &lt;span class="php-hl-reserved"&gt;public&lt;/span&gt; &lt;span class="php-hl-var"&gt;$connectionID&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;db&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
 
    &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;public&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;function&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;createUrl&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$manager&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-var"&gt;$route&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-var"&gt;$params&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-var"&gt;$ampersand&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
    &lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
        &lt;span class="php-hl-reserved"&gt;if&lt;/span&gt; &lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$route&lt;/span&gt;&lt;span class="php-hl-code"&gt;===&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;car/index&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
        &lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
            &lt;span class="php-hl-reserved"&gt;if&lt;/span&gt; &lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;isset&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$params&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;[&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;manufacturer&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;]&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-var"&gt;$params&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;[&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;model&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;]&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
                &lt;span class="php-hl-reserved"&gt;return&lt;/span&gt; &lt;span class="php-hl-var"&gt;$params&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;[&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;manufacturer&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;]&lt;/span&gt;&lt;span class="php-hl-code"&gt; . &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;/&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; . &lt;/span&gt;&lt;span class="php-hl-var"&gt;$params&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;[&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;model&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;]&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
            &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;else&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;if&lt;/span&gt; &lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;isset&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$params&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;[&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;manufacturer&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;]&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
                &lt;span class="php-hl-reserved"&gt;return&lt;/span&gt; &lt;span class="php-hl-var"&gt;$params&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;[&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;manufacturer&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;]&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
        &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;
        &lt;span class="php-hl-reserved"&gt;return&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;false&lt;/span&gt;&lt;span class="php-hl-code"&gt;;  &lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; не применяем правило&lt;/span&gt;
    &lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;
 
    &lt;span class="php-hl-reserved"&gt;public&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;function&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;parseUrl&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$manager&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-var"&gt;$request&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-var"&gt;$pathInfo&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-var"&gt;$rawPathInfo&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
    &lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
        &lt;span class="php-hl-reserved"&gt;if&lt;/span&gt; &lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;preg_match&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;%^(\w+)(/(\w+))?$%&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-var"&gt;$pathInfo&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-var"&gt;$matches&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
        &lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
            &lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; совпадают ли $matches[1] и $matches[3] с&lt;/span&gt;
            &lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; производителем и моделью в базе?&lt;/span&gt;
            &lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; если да, выставляем $_GET['manufacturer'] и/или $_GET['model']&lt;/span&gt;
            &lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; и возвращаем 'car/index'&lt;/span&gt;
        &lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;
        &lt;span class="php-hl-reserved"&gt;return&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;false&lt;/span&gt;&lt;span class="php-hl-code"&gt;;  &lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; не применяем правило&lt;/span&gt;
    &lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;
&lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;Улучшенный автозагрузчик классов&lt;/h3&gt;

&lt;p&gt;В Yii уже есть загрузчик классов, подключающий их как только они потребуются. Теперь он не конфликтует со сторонними загрузчиками и может выполняться как до них, так и после. В предыдущих версиях он всегда выполнялся после сторонних автозагрузчиков, что приводило к лишним вызовам при использовании классов Yii:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; По умолчанию сторонний загрузчик регистрируется до загрузчика Yii&lt;/span&gt;
&lt;span class="php-hl-identifier"&gt;Yii&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;registerAutoloader&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$autoloader&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Теперь можно делать так:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; При передаче true вторым параметром сторонний автозагрузчик добавляется после загрузчика Yii&lt;/span&gt;
&lt;span class="php-hl-identifier"&gt;Yii&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;registerAutoloader&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$autoloader&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;true&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;По умолчанию автозагрузчик Yii использует PHP include path. Для некоторых хостингов это является проблемой, решить которую можно немного поправив &lt;code&gt;index.php&lt;/code&gt;:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-reserved"&gt;require&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;path/to/yii.php&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
&lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; отключаем PHP include path&lt;/span&gt;
&lt;span class="php-hl-identifier"&gt;Yii&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-var"&gt;$enableIncludePath&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;false&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;Yii&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;createWebApplication&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$config&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;run&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;Логирование в режиме реального времени&lt;/h3&gt;

&lt;p&gt;Некоторые консольные приложения могут работать очень долго. Для них полезно писать сообщения в лог сразу, а не ждать завершения приложения:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; автоматически передаём каждое сообщение роутеру лога&lt;/span&gt;
&lt;span class="php-hl-identifier"&gt;Yii&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;getLogger&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;autoFlush&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-number"&gt;1&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
&lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; автоматически пишем сообщения при получении логгером&lt;/span&gt;
&lt;span class="php-hl-identifier"&gt;Yii&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;getLogger&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;autoDump&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;true&lt;/span&gt;&lt;span class="php-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;Работаем со счётчиками в БД через AR&lt;/h3&gt;

&lt;p&gt;В классе &lt;code&gt;CActiveRecord&lt;/code&gt; появился новый метод &lt;code&gt;saveCounters()&lt;/code&gt;, похожий на существующий &lt;code&gt;CActiveRecord::updateCounters()&lt;/code&gt;. Главное отличие — &lt;code&gt;saveCounters()&lt;/code&gt; работает только с текущим объектом в то время как &lt;code&gt;updateCounters()&lt;/code&gt; работает со всей таблицей:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-var"&gt;$post&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-identifier"&gt;Post&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;model&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;findByPk&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-number"&gt;1&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
&lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; наращиваем количество просмотров поста&lt;/span&gt;
&lt;span class="php-hl-var"&gt;$post&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;saveCounters&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;views&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-number"&gt;1&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
&lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; то же для прошлый версий&lt;/span&gt;
&lt;span class="php-hl-identifier"&gt;Post&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;model&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;updateCounters&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;views&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-number"&gt;1&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;id=1&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;Генерация файлов переводов&lt;/h3&gt;

&lt;p&gt;При использовании &lt;code&gt;yiic message&lt;/code&gt; часто приходилось удалять старый файл и заменять его новым, который генерировался рядом. Теперь можно писать сразу в старый файл, если выставить в конфигурации команды опцию &lt;code&gt;overwrite&lt;/code&gt; в &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;Создание URL в консольных приложениях&lt;/h3&gt;

&lt;p&gt;В веб-приложениях для генерации URL обычно используется &lt;code&gt;CUrlManager&lt;/code&gt;, который ранее не был доступен консольным приложениям. Теперь и в веб-приложениях и в консольных можно пользоваться &lt;code&gt;Yii::app()-&amp;gt;createUrl()&lt;/code&gt;, что очень удобно, например, для построения sitemap, в котором перечисляются URL веб-приложения.&lt;/p&gt;

&lt;h3&gt;В clips теперь можно использовать параметры&lt;/h3&gt;

&lt;p&gt;Это полезно в том случае, когда кусок кода в view повторяется много раз, но он недостаточно сложен для выноса его в отдельный файл:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-inlinetags"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; определяем clip &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
&amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;beginClip&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;hello&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
&amp;lt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;p&lt;/span&gt;&lt;span class="php-hl-code"&gt;&amp;gt;Привет, &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;username&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;&lt;span class="php-hl-code"&gt;!&amp;lt;/&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;p&lt;/span&gt;&lt;span class="php-hl-code"&gt;&amp;gt;
&amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;endClip&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt; &lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
 
&amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; используем clip &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
&amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;renderClip&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;hello&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
    &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;{username}&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;Qiang&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
&amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;renderClip&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;hello&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
    &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;{username}&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;Alex&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
&amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;renderClip&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;hello&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
    &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;{username}&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;Michael&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/LfFPQdefHNU" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/yii-1.1.8</guid>
			<pubDate>Sun, 26 Jun 2011 20:08:38 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/yii-1.1.8</feedburner:origLink></item>
		<item>
			<title><![CDATA[Yii 1.1.7]]></title>
			<link>http://feeds.yiiframework.ru/~r/Yiiframeworkru/~3/38jHldJyM6w/yii-1.1.7</link>
			<description>&lt;p&gt;На днях вышел релиз 1.1.7 PHP-фреймворка Yii, в который было включено более 90 исправленных ошибок, улучшений и новых возможностей.&lt;/p&gt;

&lt;p&gt;Полный список изменений &lt;a href="http://www.yiiframework.com/files/CHANGELOG-1.1.7.txt"&gt;доступен на сайте фреймворка&lt;/a&gt;, самые вкусные из которых мы рассмотрим ниже.&lt;/p&gt;

&lt;h3&gt;&lt;a href="http://yiiframework.ru/doc/guide/topics.url#user-friendly-urls"&gt;Поддержка URL в стиле REST&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Теперь при использовании &lt;a href="http://www.yiiframework.com/doc/api/1.1/CUrlManager/"&gt;CUrlManager&lt;/a&gt; можно указать
метод (GET, POST, PUT и т.д.) в свойстве &lt;code&gt;verb&lt;/code&gt; правила URL.
К примеру, приведённые ниже правила &lt;code&gt;GET&lt;/code&gt;-запрос на &lt;code&gt;post/123&lt;/code&gt; будет обрабатываться
действием &lt;code&gt;post/view&lt;/code&gt;, а &lt;code&gt;PUT&lt;/code&gt; или &lt;code&gt;POST&lt;/code&gt; на &lt;code&gt;post/123&lt;/code&gt; — действием &lt;code&gt;post/update&lt;/code&gt;.&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-reserved"&gt;return&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
    &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;components&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
        &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;urlManager&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
            &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;urlFormat&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;path&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
            &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;rules&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
                &lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;&amp;lt;controller&amp;gt;/view&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;pattern&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;&amp;lt;controller:\w&amp;gt;/&amp;lt;id:\d+&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;verb&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;GET&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,                
                &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;&amp;lt;controller&amp;gt;/update&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;pattern&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;&amp;lt;controller:\w&amp;gt;/&amp;lt;id:\d+&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;verb&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;PUT, POST&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
            &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
        &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
    &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Получить данные &lt;code&gt;PUT&lt;/code&gt; и &lt;code&gt;DELETE&lt;/code&gt; можно при помощи методов &lt;a href="http://www.yiiframework.com/doc/api/1.1/CHttpRequest/#getPut-detail"&gt;CHttpRequest::getPut()&lt;/a&gt; и &lt;a href="http://www.yiiframework.com/doc/api/1.1/CHttpRequest#getDelete-detail"&gt;CHttpRequest::getDelete()&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;&lt;a href="http://yiiframework.ru/doc/guide/caching.data#query-caching"&gt;Кэширование запросов&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;При кэшировании запроса его результат сохраняется в кэш и, в случае повторного запроса берётся оттуда напрямую.&lt;/p&gt;

&lt;p&gt;Кэширование запросов реализовано как для DAO, так и для AR. Несколько примеров:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; кэшируем результат выполнения $sql на 1000 секунд или пока не обновится tbl_post&lt;/span&gt;
&lt;span class="php-hl-var"&gt;$sql&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;SELECT * FROM tbl_post LIMIT 20&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
&lt;/span&gt;&lt;span class="php-hl-var"&gt;$dependency&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;new&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;CDbCacheDependency&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;SELECT MAX(update_time) FROM tbl_post&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
&lt;/span&gt;&lt;span class="php-hl-var"&gt;$rows&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-identifier"&gt;Yii&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;app&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;db&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;cache&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-number"&gt;1000&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-var"&gt;$dependency&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;createCommand&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$sql&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;queryAll&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
 
&lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; то же, но для AR&lt;/span&gt;
&lt;span class="php-hl-var"&gt;$posts&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-identifier"&gt;Post&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;model&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;cache&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-number"&gt;1000&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-var"&gt;$dependency&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;findAll&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
&lt;/span&gt;&lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; query caching with relational AR&lt;/span&gt;
&lt;span class="php-hl-var"&gt;$posts&lt;/span&gt;&lt;span class="php-hl-code"&gt; = &lt;/span&gt;&lt;span class="php-hl-identifier"&gt;Post&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;model&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;cache&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-number"&gt;1000&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-var"&gt;$dependency&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;with&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;author&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;findAll&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a href="http://yiiframework.ru/doc/guide/basics.controller#action-parameter-binding"&gt;Привязка параметров для классов действий&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;В версии 1.1.4 была добавлена поддержка автоматического наполнения параметров для действий контроллера.
В этой версии возможность была расширена на действия, описываемые в классах. Пример:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-reserved"&gt;class&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;UpdateAction&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;extends&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;CAction&lt;/span&gt;
&lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
    &lt;span class="php-hl-reserved"&gt;public&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;function&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;run&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$id&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
    &lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
        &lt;span class="php-hl-comment"&gt;//&lt;/span&gt;&lt;span class="php-hl-comment"&gt; $id будет заполняться данными из $_GET['id']&lt;/span&gt;
    &lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;
&lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CActiveForm"&gt;Прозрачная валидация на клиенте&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;CActiveForm — мощный виджет, который значительно облегчает создание формы и её валидацию.
Раньше он поддерживал только валидацию на стороне сервера и валидацию через AJAX.
В данной версии добавлена валидация силами клиента, которая работает быстрее и не нагружает сервер.&lt;/p&gt;

&lt;p&gt;Для реализации валидации на клиенте нет необходимости в дополнительном коде. Валидация
работает на основе правил модели точно так же, как и валидация на стороне сервера.&lt;/p&gt;

&lt;p&gt;Включить валидацию на клиенте можно выставив &lt;a href="http://www.yiiframework.com/doc/api/1.1/CActiveForm#enableClientValidation-detail"&gt;CActiveForm::enableClientValidation&lt;/a&gt;
в &lt;code&gt;true&lt;/code&gt;:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-inlinetags"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="php-hl-var"&gt;$form&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&lt;/span&gt;&lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;beginWidget&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;CActiveForm&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
    &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;enableClientValidation&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;true&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
 
    &amp;lt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;div&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;class&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="php-hl-string"&gt;row&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="php-hl-code"&gt;&amp;gt;
        &amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;echo&lt;/span&gt; &lt;span class="php-hl-var"&gt;$form&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;labelEx&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$model&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;username&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
        &amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;echo&lt;/span&gt; &lt;span class="php-hl-var"&gt;$form&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;textField&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$model&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;username&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
        &amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;echo&lt;/span&gt; &lt;span class="php-hl-var"&gt;$form&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;error&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$model&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;username&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
    &amp;lt;/&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;div&lt;/span&gt;&lt;span class="php-hl-code"&gt;&amp;gt;
 
    &amp;lt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;div&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;class&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="php-hl-string"&gt;row&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="php-hl-code"&gt;&amp;gt;
        &amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;echo&lt;/span&gt; &lt;span class="php-hl-var"&gt;$form&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;labelEx&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$model&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;password&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
        &amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;echo&lt;/span&gt; &lt;span class="php-hl-var"&gt;$form&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;passwordField&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$model&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;password&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
        &amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;echo&lt;/span&gt; &lt;span class="php-hl-var"&gt;$form&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;error&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-var"&gt;$model&lt;/span&gt;&lt;span class="php-hl-code"&gt;,&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;password&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
    &amp;lt;/&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;div&lt;/span&gt;&lt;span class="php-hl-code"&gt;&amp;gt;
 
    &amp;lt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;div&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;class&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="php-hl-string"&gt;row buttons&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="php-hl-code"&gt;&amp;gt;
        &amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;echo&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;CHtml&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;submitButton&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;Login&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="php-hl-code"&gt;
    &amp;lt;/&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;div&lt;/span&gt;&lt;span class="php-hl-code"&gt;&amp;gt;
 
&amp;lt;?&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;php&lt;/span&gt; &lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;endWidget&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;; &lt;/span&gt;&lt;span class="php-hl-inlinetags"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a href="http://yiiframework.ru/doc/guide/index/doc/guide/database.arr#relational-query-with-named-scopes"&gt;Передача параметров реляционным именованным группам параметров&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Теперь можно передавать параметры реляционным именованным группам параметров. К примеру,
если имеется группа &lt;code&gt;rated&lt;/code&gt; в модели &lt;code&gt;Post&lt;/code&gt;, которая принимает параметром минимальный рейтинг записи,
можно использовать это из модели &lt;code&gt;User&lt;/code&gt; следующим образом:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-var"&gt;$users&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;User&lt;/span&gt;&lt;span class="php-hl-code"&gt;::&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;model&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;findAll&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
    &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;with&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
        &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;posts&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
            &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;scopes&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
                &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;rated&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="php-hl-number"&gt;5&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
            &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
        &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
    &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a href="http://yiiframework.ru/doc/guide/database.arr#relational-query-with-through"&gt;Использование 'through' с HAS_MANY и HAS_ONE&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;В Active Record добавлена поддержка опции &lt;code&gt;through&lt;/code&gt;, которая позволяет строить отношения,
подобные &lt;code&gt;MANY_MANY&lt;/code&gt;, но более гибкие, позволяющие получение и использование данных из
средней таблицы-моста.&lt;/p&gt;

&lt;p&gt;К примеру, можно получить все комментарии для всех пользователей определённой группы.&lt;/p&gt;

&lt;p&gt;Больше информации и примеров можно найти &lt;a href="http://yiiframework.ru/doc/guide/database.arr#relational-query-with-through"&gt;в соответствующем разделе руководства&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;&lt;a href="http://yiiframework.ru/doc/guide/database.migration#transactional-migrations"&gt;Использование транзакций в миграциях&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;При выполнении миграции бывают ситуации, когда часть миграции не применяется 
и требуется откатить всё, что успело примениться. Хорошее решение данной проблемы — обернуть всю миграцию в транзакцию.
Конечно, можно сделать это и напрямую, но использование новой возможности более удобно.&lt;/p&gt;

&lt;p&gt;Вместо реализации &lt;a href="http://www.yiiframework.com/doc/api/1.1/CDbMigration/#up-detail"&gt;CDbMigration::up()&lt;/a&gt; и &lt;a href="http://www.yiiframework.com/doc/api/1.1/CDbMigration/#down-detail"&gt;CDbMigration::down()&lt;/a&gt;,
можно использовать &lt;a href="http://www.yiiframework.com/doc/api/1.1/CDbMigration/#safeUp-detail"&gt;CDbMigration::safeUp()&lt;/a&gt; и &lt;a href="http://www.yiiframework.com/doc/api/1.1/CDbMigration/#safeDown-detail"&gt;CDbMigration::safeDown()&lt;/a&gt;.
После этого код будет обёрнут в транзакцию:&lt;/p&gt;

&lt;div class="hl-code"&gt;&lt;div class="php-hl-main"&gt;&lt;pre&gt;&lt;span class="php-hl-reserved"&gt;class&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;m101129_185401_create_news_table&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;extends&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;CDbMigration&lt;/span&gt;
&lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
    &lt;span class="php-hl-reserved"&gt;public&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;function&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;safeUp&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
    &lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
        &lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;createTable&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;tbl_news&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;, &lt;/span&gt;&lt;span class="php-hl-reserved"&gt;array&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;
            &lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;id&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;pk&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
            &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;title&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;string NOT NULL&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
            &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;content&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;text&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-code"&gt;,
        &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
    &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;
 
    &lt;span class="php-hl-reserved"&gt;public&lt;/span&gt; &lt;span class="php-hl-reserved"&gt;function&lt;/span&gt; &lt;span class="php-hl-identifier"&gt;safeDown&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;
    &lt;span class="php-hl-brackets"&gt;{&lt;/span&gt;
        &lt;span class="php-hl-var"&gt;$this&lt;/span&gt;&lt;span class="php-hl-code"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="php-hl-identifier"&gt;dropTable&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-string"&gt;tbl_news&lt;/span&gt;&lt;span class="php-hl-quotes"&gt;'&lt;/span&gt;&lt;span class="php-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="php-hl-code"&gt;;
    &lt;/span&gt;&lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;
&lt;span class="php-hl-brackets"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Стоит отметить, что не все СУБД поддерживают транзакции.&lt;/p&gt;

&lt;h3&gt;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CClientScript#packages"&gt;Регистрация и использование своих пакетов скриптов&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CClientScript/"&gt;CClientScript&lt;/a&gt; теперь позволяет зарегистрировать и использовать свои пакеты скриптов.
Ранее данная возможность использовалась исключительно для внутренних целей.&lt;/p&gt;

&lt;p&gt;Пакет может содержать CSS, JavaScript, изображения и любые другие файлы, которые
необходимо показать пользователям. Пакет может зависеть от других пакетов. То есть
при регистрации пакета все пакеты, от которых он зависит, регистрируются автоматически.&lt;/p&gt;

&lt;p&gt;Работа с пакетами строится следующим образом: сначала в
&lt;a href="http://www.yiiframework.com/doc/api/1.1/CClientScript/#packages-detail"&gt;CClientScript::packages&lt;/a&gt; описываются нужные пакеты, а затем
они регистрируются при помощи &lt;a href="http://www.yiiframework.com/doc/api/1.1/CClientScript/#registerPackage-detail"&gt;CClientScript::registerPackage()&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://yiiframework.ru/forum/viewtopic.php?f=13&amp;amp;t=2700"&gt;Обсуждение на форуме&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yiiframework.com/download/"&gt;Пробуем и обновляемся&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/Yiiframeworkru/~4/38jHldJyM6w" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://yiiframework.ru/news/yii-1.1.7</guid>
			<pubDate>Tue, 29 Mar 2011 09:42:11 +0000</pubDate>
		<author>sam@rmcreative.ru (Alexander Makarov)</author>
		<feedburner:origLink>http://yiiframework.ru/news/yii-1.1.7</feedburner:origLink></item>
	</channel>
</rss>

