Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch 'master' of https://github.com/yiisoft/yii.git into form…

…atHour
  • Loading branch information...
commit 1adca742316dde05b7dcfcfd7cb84dbe1948db41 2 parents 40b5025 + 1287d21
@adminnu authored
Showing with 7,753 additions and 261 deletions.
  1. +1 −0  CHANGELOG
  2. +1 −1  LICENSE
  3. +1 −1  build/build
  4. +1 −1  build/build.bat
  5. +1 −1  build/build.xml
  6. +1 −1  build/commands/ApiCommand.php
  7. +1 −1  build/commands/AutoloadCommand.php
  8. +2 −2 build/commands/CldrCommand.php
  9. +2 −2 build/commands/LiteCommand.php
  10. +1 −1  build/commands/Utf8Command.php
  11. +1 −1  build/commands/api/ApiModel.php
  12. +1 −1  build/commands/api/layouts/main.php
  13. +1 −1  build/commands/blog/title.tex
  14. +1 −1  build/commands/guide/title.tex
  15. +1 −1  build/commands/lite/css/form.css
  16. +1 −1  build/tasks/YiiInitTask.php
  17. +1 −1  build/tasks/YiiPearTask.php
  18. +1 −1  demos/blog/css/form.css
  19. +1 −1  demos/hangman/protected/controllers/GameController.php
  20. +2 −2 docs/guide/basics.component.txt
  21. +4 −0 docs/guide/ja/changes.txt
  22. +0 −1  docs/guide/ja/database.ar.txt
  23. +1 −1  docs/guide/ja/index.txt
  24. +0 −2  docs/guide/ja/topics.webservice.txt
  25. +1 −1  docs/guide/pl/index.txt
  26. +1 −1  docs/guide/zh_cn/index.txt
  27. +176 −0 docs/guide/zh_tw/basics.application.txt
  28. +84 −0 docs/guide/zh_tw/basics.best-practices.txt
  29. +156 −0 docs/guide/zh_tw/basics.component.txt
  30. +276 −0 docs/guide/zh_tw/basics.controller.txt
  31. +128 −0 docs/guide/zh_tw/basics.convention.txt
  32. +29 −0 docs/guide/zh_tw/basics.entry.txt
  33. +20 −0 docs/guide/zh_tw/basics.model.txt
  34. +100 −0 docs/guide/zh_tw/basics.module.txt
  35. +42 −0 docs/guide/zh_tw/basics.mvc.txt
  36. +239 −0 docs/guide/zh_tw/basics.namespace.txt
  37. +100 −0 docs/guide/zh_tw/basics.view.txt
  38. +37 −0 docs/guide/zh_tw/basics.workflow.txt
  39. +196 −0 docs/guide/zh_tw/caching.data.txt
  40. +25 −0 docs/guide/zh_tw/caching.dynamic.txt
  41. +104 −0 docs/guide/zh_tw/caching.fragment.txt
  42. +63 −0 docs/guide/zh_tw/caching.overview.txt
  43. +70 −0 docs/guide/zh_tw/caching.page.txt
  44. +88 −0 docs/guide/zh_tw/changes.txt
  45. +529 −0 docs/guide/zh_tw/database.ar.txt
  46. +599 −0 docs/guide/zh_tw/database.arr.txt
  47. +233 −0 docs/guide/zh_tw/database.dao.txt
  48. +10 −0 docs/guide/zh_tw/database.overview.txt
  49. +179 −0 docs/guide/zh_tw/extension.create.txt
  50. +29 −0 docs/guide/zh_tw/extension.integration.txt
  51. +21 −0 docs/guide/zh_tw/extension.overview.txt
  52. +267 −0 docs/guide/zh_tw/extension.use.txt
  53. +61 −0 docs/guide/zh_tw/form.action.txt
  54. +445 −0 docs/guide/zh_tw/form.builder.txt
  55. +313 −0 docs/guide/zh_tw/form.model.txt
  56. +16 −0 docs/guide/zh_tw/form.overview.txt
  57. +64 −0 docs/guide/zh_tw/form.table.txt
  58. +98 −0 docs/guide/zh_tw/form.view.txt
  59. +13 −0 docs/guide/zh_tw/index.txt
  60. +206 −0 docs/guide/zh_tw/quickstart.first-app.txt
  61. +22 −0 docs/guide/zh_tw/quickstart.installation.txt
  62. +36 −0 docs/guide/zh_tw/quickstart.what-is-yii.txt
  63. +60 −0 docs/guide/zh_tw/test.fixture.txt
  64. +101 −0 docs/guide/zh_tw/test.overview.txt
  65. +72 −0 docs/guide/zh_tw/toc.txt
  66. +431 −0 docs/guide/zh_tw/topics.auth.txt
  67. +99 −0 docs/guide/zh_tw/topics.error.txt
  68. +280 −0 docs/guide/zh_tw/topics.gii.txt
  69. +222 −0 docs/guide/zh_tw/topics.i18n.txt
  70. +186 −0 docs/guide/zh_tw/topics.logging.txt
  71. +118 −0 docs/guide/zh_tw/topics.performance.txt
  72. +108 −0 docs/guide/zh_tw/topics.security.txt
  73. +231 −0 docs/guide/zh_tw/topics.theming.txt
  74. +287 −0 docs/guide/zh_tw/topics.url.txt
  75. +177 −0 docs/guide/zh_tw/topics.webservice.txt
  76. +42 −0 docs/guide/zh_tw/upgrade.txt
  77. +1 −1  framework/YiiBase.php
  78. +1 −1  framework/base/CApplication.php
  79. +1 −1  framework/base/CApplicationComponent.php
  80. +1 −1  framework/base/CBehavior.php
  81. +1 −1  framework/base/CComponent.php
  82. +1 −1  framework/base/CErrorEvent.php
  83. +1 −1  framework/base/CErrorHandler.php
  84. +1 −1  framework/base/CException.php
  85. +1 −1  framework/base/CExceptionEvent.php
  86. +1 −1  framework/base/CHttpException.php
  87. +1 −1  framework/base/CModel.php
  88. +1 −1  framework/base/CModelBehavior.php
  89. +1 −1  framework/base/CModelEvent.php
  90. +1 −1  framework/base/CModule.php
  91. +1 −1  framework/base/CSecurityManager.php
  92. +1 −1  framework/base/CStatePersister.php
  93. +1 −1  framework/base/interfaces.php
  94. +1 −1  framework/caching/CApcCache.php
  95. +1 −1  framework/caching/CCache.php
  96. +1 −1  framework/caching/CDbCache.php
  97. +1 −1  framework/caching/CDummyCache.php
  98. +1 −1  framework/caching/CEAcceleratorCache.php
  99. +1 −1  framework/caching/CFileCache.php
  100. +1 −1  framework/caching/CMemCache.php
  101. +1 −1  framework/caching/CWinCache.php
  102. +1 −1  framework/caching/CXCache.php
  103. +1 −1  framework/caching/CZendDataCache.php
  104. +1 −1  framework/caching/dependencies/CCacheDependency.php
  105. +1 −1  framework/caching/dependencies/CChainedCacheDependency.php
  106. +1 −1  framework/caching/dependencies/CDbCacheDependency.php
  107. +1 −1  framework/caching/dependencies/CDirectoryCacheDependency.php
  108. +1 −1  framework/caching/dependencies/CExpressionDependency.php
  109. +1 −1  framework/caching/dependencies/CFileCacheDependency.php
  110. +1 −1  framework/caching/dependencies/CGlobalStateCacheDependency.php
  111. +1 −1  framework/cli/commands/MessageCommand.php
  112. +1 −1  framework/cli/commands/MigrateCommand.php
  113. +1 −1  framework/cli/commands/ShellCommand.php
  114. +1 −1  framework/cli/commands/WebAppCommand.php
  115. +1 −1  framework/cli/commands/shell/ControllerCommand.php
  116. +1 −1  framework/cli/commands/shell/CrudCommand.php
  117. +1 −1  framework/cli/commands/shell/FormCommand.php
  118. +1 −1  framework/cli/commands/shell/HelpCommand.php
  119. +1 −1  framework/cli/commands/shell/ModelCommand.php
  120. +1 −1  framework/cli/commands/shell/ModuleCommand.php
  121. +1 −1  framework/cli/views/webapp/css/form.css
  122. +1 −1  framework/collections/CAttributeCollection.php
  123. +1 −1  framework/collections/CConfiguration.php
  124. +1 −1  framework/collections/CList.php
  125. +1 −1  framework/collections/CListIterator.php
  126. +1 −1  framework/collections/CMap.php
  127. +1 −1  framework/collections/CMapIterator.php
  128. +1 −1  framework/collections/CQueue.php
  129. +1 −1  framework/collections/CQueueIterator.php
  130. +1 −1  framework/collections/CStack.php
  131. +1 −1  framework/collections/CStackIterator.php
  132. +1 −1  framework/collections/CTypedList.php
  133. +1 −1  framework/collections/CTypedMap.php
  134. +1 −1  framework/console/CConsoleApplication.php
  135. +1 −1  framework/console/CConsoleCommand.php
  136. +1 −1  framework/console/CConsoleCommandBehavior.php
  137. +1 −1  framework/console/CConsoleCommandEvent.php
  138. +1 −1  framework/console/CConsoleCommandRunner.php
  139. +1 −1  framework/console/CHelpCommand.php
  140. +1 −1  framework/db/CDbCommand.php
  141. +4 −3 framework/db/CDbConnection.php
  142. +1 −1  framework/db/CDbDataReader.php
  143. +1 −1  framework/db/CDbException.php
  144. +2 −2 framework/db/CDbMigration.php
  145. +1 −1  framework/db/CDbTransaction.php
  146. +1 −1  framework/db/ar/CActiveFinder.php
  147. +8 −7 framework/db/ar/CActiveRecord.php
  148. +1 −1  framework/db/ar/CActiveRecordBehavior.php
  149. +1 −1  framework/db/schema/CDbColumnSchema.php
  150. +1 −1  framework/db/schema/CDbCommandBuilder.php
  151. +1 −1  framework/db/schema/CDbCriteria.php
  152. +1 −1  framework/db/schema/CDbExpression.php
  153. +1 −1  framework/db/schema/CDbSchema.php
  154. +1 −1  framework/db/schema/CDbTableSchema.php
  155. +1 −1  framework/db/schema/mssql/CMssqlColumnSchema.php
  156. +1 −1  framework/db/schema/mssql/CMssqlCommandBuilder.php
  157. +1 −1  framework/db/schema/mssql/CMssqlPdoAdapter.php
  158. +1 −1  framework/db/schema/mssql/CMssqlSchema.php
  159. +1 −1  framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php
  160. +1 −1  framework/db/schema/mssql/CMssqlTableSchema.php
  161. +1 −1  framework/db/schema/mysql/CMysqlColumnSchema.php
  162. +1 −1  framework/db/schema/mysql/CMysqlCommandBuilder.php
  163. +1 −1  framework/db/schema/mysql/CMysqlSchema.php
  164. +1 −1  framework/db/schema/mysql/CMysqlTableSchema.php
  165. +1 −1  framework/db/schema/oci/COciColumnSchema.php
  166. +1 −1  framework/db/schema/oci/COciCommandBuilder.php
  167. +1 −1  framework/db/schema/oci/COciSchema.php
  168. +1 −1  framework/db/schema/oci/COciTableSchema.php
  169. +1 −1  framework/db/schema/pgsql/CPgsqlColumnSchema.php
  170. +1 −1  framework/db/schema/pgsql/CPgsqlSchema.php
  171. +1 −1  framework/db/schema/pgsql/CPgsqlTableSchema.php
  172. +1 −1  framework/db/schema/sqlite/CSqliteColumnSchema.php
  173. +1 −1  framework/db/schema/sqlite/CSqliteCommandBuilder.php
  174. +1 −1  framework/db/schema/sqlite/CSqliteSchema.php
  175. +1 −1  framework/gii/CCodeFile.php
  176. +1 −1  framework/gii/CCodeForm.php
  177. +1 −1  framework/gii/CCodeGenerator.php
  178. +1 −1  framework/gii/CCodeModel.php
  179. +1 −1  framework/gii/GiiModule.php
  180. +1 −1  framework/i18n/CChoiceFormat.php
  181. +1 −1  framework/i18n/CDateFormatter.php
  182. +1 −1  framework/i18n/CDbMessageSource.php
  183. +1 −1  framework/i18n/CGettextMessageSource.php
  184. +1 −1  framework/i18n/CLocale.php
  185. +1 −1  framework/i18n/CMessageSource.php
  186. +1 −1  framework/i18n/CNumberFormatter.php
  187. +1 −1  framework/i18n/CPhpMessageSource.php
  188. +1 −1  framework/i18n/data/aa.php
  189. +1 −1  framework/i18n/data/aa_dj.php
  190. +1 −1  framework/i18n/data/aa_er.php
  191. +1 −1  framework/i18n/data/aa_et.php
  192. +1 −1  framework/i18n/data/af.php
  193. +1 −1  framework/i18n/data/af_na.php
  194. +1 −1  framework/i18n/data/af_za.php
  195. +1 −1  framework/i18n/data/agq.php
  196. +1 −1  framework/i18n/data/agq_cm.php
  197. +1 −1  framework/i18n/data/ak.php
  198. +1 −1  framework/i18n/data/ak_gh.php
  199. +1 −1  framework/i18n/data/am.php
  200. +1 −1  framework/i18n/data/am_et.php
  201. +1 −1  framework/i18n/data/ar.php
  202. +1 −1  framework/i18n/data/ar_001.php
  203. +1 −1  framework/i18n/data/ar_ae.php
  204. +1 −1  framework/i18n/data/ar_bh.php
  205. +1 −1  framework/i18n/data/ar_dz.php
  206. +1 −1  framework/i18n/data/ar_eg.php
  207. +1 −1  framework/i18n/data/ar_iq.php
  208. +1 −1  framework/i18n/data/ar_jo.php
  209. +1 −1  framework/i18n/data/ar_kw.php
  210. +1 −1  framework/i18n/data/ar_lb.php
  211. +1 −1  framework/i18n/data/ar_ly.php
  212. +1 −1  framework/i18n/data/ar_ma.php
  213. +1 −1  framework/i18n/data/ar_om.php
  214. +1 −1  framework/i18n/data/ar_qa.php
  215. +1 −1  framework/i18n/data/ar_sa.php
  216. +1 −1  framework/i18n/data/ar_sd.php
  217. +1 −1  framework/i18n/data/ar_sy.php
  218. +1 −1  framework/i18n/data/ar_tn.php
  219. +1 −1  framework/i18n/data/ar_ye.php
  220. +1 −1  framework/i18n/data/as.php
  221. +1 −1  framework/i18n/data/as_in.php
  222. +1 −1  framework/i18n/data/asa.php
  223. +1 −1  framework/i18n/data/asa_tz.php
  224. +1 −1  framework/i18n/data/az.php
  225. +1 −1  framework/i18n/data/az_arab.php
  226. +1 −1  framework/i18n/data/az_arab_ir.php
  227. +1 −1  framework/i18n/data/az_az.php
  228. +1 −1  framework/i18n/data/az_cyrl.php
  229. +1 −1  framework/i18n/data/az_cyrl_az.php
  230. +1 −1  framework/i18n/data/az_ir.php
  231. +1 −1  framework/i18n/data/az_latn.php
  232. +1 −1  framework/i18n/data/az_latn_az.php
  233. +1 −1  framework/i18n/data/bas.php
  234. +1 −1  framework/i18n/data/bas_cm.php
  235. +1 −1  framework/i18n/data/be.php
  236. +1 −1  framework/i18n/data/be_by.php
  237. +1 −1  framework/i18n/data/bem.php
  238. +1 −1  framework/i18n/data/bem_zm.php
  239. +1 −1  framework/i18n/data/bez.php
  240. +1 −1  framework/i18n/data/bez_tz.php
  241. +1 −1  framework/i18n/data/bg.php
  242. +1 −1  framework/i18n/data/bg_bg.php
  243. +1 −1  framework/i18n/data/bm.php
  244. +1 −1  framework/i18n/data/bm_ml.php
  245. +1 −1  framework/i18n/data/bn.php
  246. +1 −1  framework/i18n/data/bn_bd.php
  247. +1 −1  framework/i18n/data/bn_in.php
  248. +1 −1  framework/i18n/data/bo.php
  249. +1 −1  framework/i18n/data/bo_cn.php
  250. +1 −1  framework/i18n/data/bo_in.php
  251. +1 −1  framework/i18n/data/br.php
  252. +1 −1  framework/i18n/data/br_fr.php
  253. +1 −1  framework/i18n/data/brx.php
  254. +1 −1  framework/i18n/data/brx_in.php
  255. +1 −1  framework/i18n/data/bs.php
  256. +1 −1  framework/i18n/data/bs_ba.php
  257. +1 −1  framework/i18n/data/byn.php
  258. +1 −1  framework/i18n/data/byn_er.php
  259. +1 −1  framework/i18n/data/ca.php
  260. +1 −1  framework/i18n/data/ca_es.php
  261. +1 −1  framework/i18n/data/cch.php
  262. +1 −1  framework/i18n/data/cch_ng.php
  263. +1 −1  framework/i18n/data/cgg.php
  264. +1 −1  framework/i18n/data/cgg_ug.php
  265. +1 −1  framework/i18n/data/chr.php
  266. +1 −1  framework/i18n/data/chr_us.php
  267. +1 −1  framework/i18n/data/cs.php
  268. +1 −1  framework/i18n/data/cs_cz.php
  269. +1 −1  framework/i18n/data/cy.php
  270. +1 −1  framework/i18n/data/cy_gb.php
  271. +1 −1  framework/i18n/data/da.php
  272. +1 −1  framework/i18n/data/da_dk.php
  273. +1 −1  framework/i18n/data/dav.php
  274. +1 −1  framework/i18n/data/dav_ke.php
  275. +1 −1  framework/i18n/data/de.php
  276. +1 −1  framework/i18n/data/de_at.php
  277. +1 −1  framework/i18n/data/de_be.php
  278. +1 −1  framework/i18n/data/de_ch.php
  279. +1 −1  framework/i18n/data/de_de.php
  280. +1 −1  framework/i18n/data/de_li.php
  281. +1 −1  framework/i18n/data/de_lu.php
  282. +1 −1  framework/i18n/data/dje.php
  283. +1 −1  framework/i18n/data/dje_ne.php
  284. +1 −1  framework/i18n/data/dua.php
  285. +1 −1  framework/i18n/data/dua_cm.php
  286. +1 −1  framework/i18n/data/dv.php
  287. +1 −1  framework/i18n/data/dv_mv.php
  288. +1 −1  framework/i18n/data/dyo.php
  289. +1 −1  framework/i18n/data/dyo_sn.php
  290. +1 −1  framework/i18n/data/dz.php
  291. +1 −1  framework/i18n/data/dz_bt.php
  292. +1 −1  framework/i18n/data/ebu.php
  293. +1 −1  framework/i18n/data/ebu_ke.php
  294. +1 −1  framework/i18n/data/ee.php
  295. +1 −1  framework/i18n/data/ee_gh.php
  296. +1 −1  framework/i18n/data/ee_tg.php
  297. +1 −1  framework/i18n/data/el.php
  298. +1 −1  framework/i18n/data/el_cy.php
  299. +1 −1  framework/i18n/data/el_gr.php
  300. +1 −1  framework/i18n/data/el_polyton.php
Sorry, we could not display the entire diff because too many files (1,023) changed.
View
1  CHANGELOG
@@ -9,6 +9,7 @@ Version 1.1.14 work in progress
- Bug #1915: CDataProviderIterator: fixed init in case of disabled pagination (antoncpu)
- Bug #1941: yiiactiveform.js form reset now uses CHtml::errorCss instead of a hardcoded value (mdomba)
- Bug #1942: CActiveForm client/ajax validation will now remove error class from server side validation (mdomba)
+- Bug #1984: CDbMigration: fix of undeclared variable usage in debug information in dropPrimaryKey (papulovskiy)
- Enh #1847: Added COutputCache::varyByLanguage to generate separate cache for different languages (Obramko)
- Enh #1971: Added CLocale::getHourMeridian defining hour meridian type for the current locale (adminnu)
- Chg #645: CDbConnection now throws CDbException when failed to open DB connection instead of failing with a warning (kidol, eirikhm, samdark, cebe)
View
2  LICENSE
@@ -1,7 +1,7 @@
The Yii framework is free software. It is released under the terms of
the following BSD License.
-Copyright © 2008-2011 by Yii Software LLC (http://www.yiisoft.com)
+Copyright (c) 2008-2013 by Yii Software LLC (http://www.yiisoft.com)
All rights reserved.
Redistribution and use in source and binary forms, with or without
View
2  build/build
@@ -8,7 +8,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008 Yii Software LLC
+ * @copyright 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
2  build/build.bat
@@ -7,7 +7,7 @@ rem This is the bootstrap script for running build on Windows.
rem
rem @author Qiang Xue <qiang.xue@gmail.com>
rem @link http://www.yiiframework.com/
-rem @copyright Copyright &copy; 2008 Yii Software LLC
+rem @copyright 2008 Yii Software LLC
rem @license http://www.yiiframework.com/license/
rem @version $Id$
rem -------------------------------------------------------------
View
2  build/build.xml
@@ -5,7 +5,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2009 Yii Software LLC
+ * @copyright 2008-2009 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
-->
View
2  build/commands/ApiCommand.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
Yii::import('application.commands.api.ApiModel');
View
2  build/commands/AutoloadCommand.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
4 build/commands/CldrCommand.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
@@ -207,7 +207,7 @@ protected function process($path)
* Copyright © 1991-2007 Unicode, Inc. All rights reserved.
* Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
*
- * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
+ * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
*/
return $data;
EOD;
View
4 build/commands/LiteCommand.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
@@ -58,7 +58,7 @@ public function run($args)
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2012 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
* @version \$Id: \$
* @since 1.0
View
2  build/commands/Utf8Command.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2012 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
2  build/commands/api/ApiModel.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
2  build/commands/api/layouts/main.php
@@ -21,7 +21,7 @@
</div><!-- end of content -->
<div id="apiFooter">
-Copyright &copy; 2008-2011 by <a href="http://www.yiisoft.com">Yii Software LLC</a><br/>
+&copy; 2008-2013 by <a href="http://www.yiisoft.com">Yii Software LLC</a><br/>
All Rights Reserved.<br/>
</div><!-- end of footer -->
View
2  build/commands/blog/title.tex
@@ -15,7 +15,7 @@
%\begin{center} \large \today \end{center}
\begin{center}
- Copyright 2008-2012. All Rights Reserved.
+ Copyright 2008-2013. All Rights Reserved.
\end{center}
\vfill
View
2  build/commands/guide/title.tex
@@ -15,7 +15,7 @@
%\begin{center} \large \today \end{center}
\begin{center}
- Copyright 2008-2012. All Rights Reserved.
+ Copyright 2008-2013. All Rights Reserved.
\end{center}
\vfill
View
2  build/commands/lite/css/form.css
@@ -5,7 +5,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2010 Yii Software LLC
+ * @copyright 2008-2010 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
2  build/tasks/YiiInitTask.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
2  build/tasks/YiiPearTask.php
@@ -4,7 +4,7 @@
*
* @author Wei Zhuo <weizho@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
2  demos/blog/css/form.css
@@ -30,7 +30,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2010 Yii Software LLC
+ * @copyright 2008-2010 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
2  demos/hangman/protected/controllers/GameController.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
- * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
View
4 docs/guide/basics.component.txt
@@ -114,7 +114,7 @@ automatically.
An event can be attached with multiple handlers. When the event is raised,
the handlers will be invoked in the order that they are attached to the event.
-If a handler decides to prevent the rest handlers from being invoked, it can set
+If a handler decides to prevent the rest of the handlers from being invoked, it can set
[$event->handled|CEvent::handled] to be true.
@@ -130,7 +130,7 @@ A component can be attached with several behaviors and thus achieve 'multiple in
Behavior classes must implement the [IBehavior] interface. Most behaviors can
extend from the [CBehavior] base class. If a behavior needs to be attached to
a [model](/doc/guide/basics.model), it may also extend from [CModelBehavior] or
-[CActiveRecordBehavior] which implements additional features specifc for models.
+[CActiveRecordBehavior] which implements additional features specific for models.
To use a behavior, it must be attached to a component first by calling the behavior's
[attach()|IBehavior::attach] method. Then we can call a behavior method via the component:
View
4 docs/guide/ja/changes.txt
@@ -3,6 +3,10 @@
このページは、各々の Yii リリースにおいて導入された主な新機能をまとめています。
+Version 1.1.14
+--------------
+ * [CPasswordHelper] を追加
+
Version 1.1.11
--------------
* [http キャッシュのサポートを追加](/doc/guide/caching.page#sec-3)
View
1  docs/guide/ja/database.ar.txt
@@ -585,4 +585,3 @@ $contents=Content::model()->findAll();
> これらは、`INSERT`、`UPDATE`、`DELETE` クエリに対しては無視されます。
> さらに、デフォルトスコープまたは名前付きスコープを宣言するとき、そのスコープを宣言するメソッドの中では AR クラスを使って DB クエリを作成することが出来ません。
-<div class="revision">$Id$</div>
View
2  docs/guide/ja/index.txt
@@ -5,7 +5,7 @@ Yii 公式ガイド
All Rights Reserved.
-2008-2010 (c) Yii Software LLC.
+2008-2013 (c) Yii Software LLC.
翻訳:
mocapapa &lt;<mocapapa@g.pugpug.org>&gt;,
View
2  docs/guide/ja/topics.webservice.txt
@@ -192,5 +192,3 @@ class PostController extends CController
サービスプロバイダで [IWebServiceProvider] インタフェースを実装することで、リモートからのメソッド呼び出しを阻止することができます。
[IWebServiceProvider::beforeWebMethod] 内でプロバイダは [CWebService] のインスタンスをうけとり、[CWebService::methodName] によって、リクエストされたメソッド名を得ることができます。
何らかの理由 (例: 権限のないアクセスなど) でリモートからのメソッド呼び出しを許可したくない場合は、false を返すことで呼び出しを阻止できます。
-
-<div class="revision">$Id$</div>
View
2  docs/guide/pl/index.txt
@@ -5,7 +5,7 @@ Ten przewodnik został wydany zgodnie z [warunkami dokumentacji Yii](http://www.
Wszystkie prawa zastrzeżone.
-2008-2011 &copy; Yii Software LLC.
+2008-2013 &copy; Yii Software LLC.
<div class="revision">$Id: index.txt 1679 2010-01-07 21:03:36Z qiang.xue $</div>
View
2  docs/guide/zh_cn/index.txt
@@ -21,7 +21,7 @@ Yii 权威指南
All Rights Reserved.
-2008-2012 &copy; Yii Software LLC.
+2008-2013 &copy; Yii Software LLC.
<div class="revision">$Id: index.txt 2335 2012-02-27 03:39:10Z dongbeta@qq.com $</div>
View
176 docs/guide/zh_tw/basics.application.txt
@@ -0,0 +1,176 @@
+應用程式
+===========
+
+應用程式是指請求處理中的執行上下文。它的主要任務是分析用戶請求並將其分派到合適的控制器中以作進一步處理。
+它同時作為服務中心,維護應用程式級別的配置。有鑒於此,應用程式也叫做`前端控制器`。
+
+應用程式由 [入口腳本](/doc/guide/basics.entry) 實體化為一個獨立的物件。這個獨立的應用程式可以在任何地方通過
+ [Yii::app()|YiiBase::app] 存取。
+
+
+應用程式配置
+-------------------------
+
+預設情況下,應用程式是一個 [CWebApplication] 的實體。要自定它,我們通常需要提供一個設定檔
+(或陣列) 以建立應用程式實體時初始化的屬性值。自定應用程式的另一種方式是繼承 [CWebApplication]。
+
+配置是一個鍵值配對陣列。每個鍵代表應用程式實體中某屬性的名字,每個值即相應屬性的初始值。
+例如,如下的配置設定了應用程式的 [name|CApplication::name] 和
+[defaultController|CWebApplication::defaultController] 屬性。
+
+~~~
+[php]
+array(
+ 'name'=>'Yii Framework',
+ 'defaultController'=>'site',
+)
+~~~
+
+我們通常在一個單獨的 PHP 腳本(e.g.`protected/config/main.php`)中保存這些配置。在腳本中,
+我們通過以下方式返回此配置陣列:
+
+~~~
+[php]
+return array(...);
+~~~
+
+要使用此配置,我們將設定檔的名字作為參數傳遞給應用程式的建構器,或像下面這樣傳遞到 [Yii::createWebApplication()]
+。這通常在 [入口腳本](/doc/guide/basics.entry) 中完成:
+
+~~~
+[php]
+$app=Yii::createWebApplication($configFile);
+~~~
+
+> Tip|提示: 如果應用程式配置非常複雜,我們可以把它分割為若干個文件,每個文件返回配置陣列中的一部分。
+然後,在主設定檔中,我們調用 PHP 的 `include()` 包含其餘的設定檔並把它們合併為一個完整的配置數組。
+
+
+應用程式基礎目錄
+--------------------------
+
+應用程式根目錄指包含了所有安全性敏感的 PHP 腳本和資料的根目錄。預設狀態下,它是一個位於含有入口腳本目錄的名為
+`protected` 的子目錄。它可以通過設置 [application configuration](/doc/guide/basics.application#application-configuration)
+中的 [basePath|CWebApplication::basePath] 屬性自定。
+
+在應用程式基礎目錄下的內容應該保護起來防止網站訪客直接存取。對於 [Apache HTTP
+伺服器](http://httpd.apache.org/), 這可以通過在根目錄中放置一個 `.htaccess`
+文件簡單的實現。 `.htaccess` 內容如下:
+
+~~~
+deny from all
+~~~
+
+應用程式元件
+---------------------
+
+應用程式的功能可以通過其靈活的元件結構輕易地自定或增強。應用程式管理了一系列應用程式元件,每個元件實現一特定功能。
+例如,應用程式通過 [CUrlManager] 和 [CHttpRequest] 的幫助解析來自用戶的請求。
+
+通過配置應用程式的 [components|CApplication::components] 屬性,
+我們可以自定義應用程式中用到的任何元件類別及其屬性值。例如,我們可以配置應用程式的 [CMemCache] 元件,
+這樣它就可以使用多個 memcache 伺服器實現快取:
+
+~~~
+[php]
+array(
+ ......
+ 'components'=>array(
+ ......
+ 'cache'=>array(
+ 'class'=>'CMemCache',
+ 'servers'=>array(
+ array('host'=>'server1', 'port'=>11211, 'weight'=>60),
+ array('host'=>'server2', 'port'=>11211, 'weight'=>40),
+ ),
+ ),
+ ),
+)
+~~~
+
+如上所示,我們在 `components` 陣列中增加了 `cache` 元素。`cache` 元素表示此元件的類別是 `CMemCache`,
+他的 `servers` 屬性應依此初始化。
+
+要訪問一個應用程式元件,使用 `Yii::app()->ComponentID` ,其中的 `ComponentID` 是指元件的ID(例如 `Yii::app()->cache`)。
+
+應用程式的元件可以通過在其配置中設置 `enabled` 為 false 禁用。當我們存取被禁用的元件時將返回 Null。
+
+> Tip|提示: 預設情況下,應用程式元件會按需建立。這意味著一個應用程式的元件如果沒有在一個用戶請求中被存取,它可能根本不被建立。
+因此,如果一個應用程式配置了很多元件,其總體性能可能並不會下降。有的應用程式元件 (例如 [CLogRouter]) 可能需要在無論它們是否被存取的情況下都要被建立。
+要實現這個,需將其ID列在應用程式的 [preload|CApplication::preload] 屬性裡。
+
+核心應用程式元件
+---------------------------
+
+Yii 預定義了一系列核心應用程式元件,提供常見 Web 應用程式中所用的功能。例如,
+[request|CWebApplication::request] 元件用於解析用戶請求並提供例如 URL,cookie 等訊息。
+通過配置這些核心元件的屬性,我們可以在幾乎所有 Yii 的預設行為。
+
+下面我們列出了由 [CWebApplication] 預定義的核心元件。
+
+ - [assetManager|CWebApplication::assetManager]: [CAssetManager] -
+管理私有資源文件的發佈。
+
+ - [authManager|CWebApplication::authManager]: [CAuthManager] - 管理角色的存取控制 (RBAC).
+
+ - [cache|CApplication::cache]: [CCache] - 提供資料快取功能。注意,你必須指定實際的類別(例如[CMemCache], [CDbCache])。
+否則,當你存取此元件時將返回 NULL。
+
+ - [clientScript|CWebApplication::clientScript]: [CClientScript] -
+管理客戶端腳本 (javascripts 和 CSS).
+
+ - [coreMessages|CApplication::coreMessages]: [CPhpMessageSource] -
+提供 Yii 框架用到的核心訊息的翻譯。
+
+ - [db|CApplication::db]: [CDbConnection] - 提供資料庫連接。注意,使用此元件你必須配置其
+[connectionString|CDbConnection::connectionString] 屬性。
+
+ - [errorHandler|CApplication::errorHandler]: [CErrorHandler] - 處理未擷取的 PHP 錯誤和異常。
+
+ - [format|CApplication::format]: [CFormatter] - 正規畫數值顯示。此功能從版本 1.1.0 起開始提供。
+
+ - [messages|CApplication::messages]: [CPhpMessageSource] - 提供Yii應用程式中使用的訊息翻譯。
+
+ - [request|CWebApplication::request]: [CHttpRequest] - 提供關於用戶請求的訊息。
+
+ - [securityManager|CApplication::securityManager]: [CSecurityManager] -
+提供安全相關的服務,例如散列,加密。
+
+ - [session|CWebApplication::session]: [CHttpSession] - 提供 session 相關的功能。
+
+ - [statePersister|CApplication::statePersister]: [CStatePersister] - 提供全域狀態持續的方法。
+
+ - [urlManager|CWebApplication::urlManager]: [CUrlManager] - 提供 URL 解析和建立相關功能
+
+ - [user|CWebApplication::user]: [CWebUser] - 提供當前用戶的識別訊息。
+
+ - [themeManager|CWebApplication::themeManager]: [CThemeManager] - 管理主題。
+
+
+應用程式的生命週期
+----------------------
+
+當處理用戶請求時,應用程式將經歷如下聲明週期:
+
+ 0. 通過 [CApplication::preinit()] 預初始化應用程式;
+
+ 1. 設置類別的自動載入器和錯誤處理;
+
+ 2. 註冊核心類別元件;
+
+ 3. 載入應用程式配置;
+
+ 4. 通過 [CApplication::init()] 初始化應用程式:
+ - 註冊應用程式行為;
+ - 載入靜態應用程式元件;
+
+ 5. 觸發 [onBeginRequest|CApplication::onBeginRequest] 事件;
+
+ 6. 處理用戶請求:
+ - 解析用戶請求;
+ - 建立控制器;
+ - 運行控制器;
+
+ 7. 觸發 [onEndRequest|CApplication::onEndRequest] 事件。
+
+<div class="revision">$Id$</div>
View
84 docs/guide/zh_tw/basics.best-practices.txt
@@ -0,0 +1,84 @@
+最佳 MVC 實務
+==================
+
+雖然大多數的網站開發工程師都已知道 模型-視圖-控制器 (MVC),但對於如何正確地使用 MVC 還是摸不著頭緒。MVC 背後的主要想法是 **程式碼的重用和關注點分離**。在這個章節中,我們將介紹一些常見的準則來如何在開發 Yii 應用程式時,也能遵循 MVC 模式。
+
+在介紹這些準則,我們假設一個 Web 應用程式包含了許多子應用程式。例如:
+
+* 前端:一個面對一般終端用戶的公開網站;
+* 後端:一個包含許多用來管理應用程式功能的網站。通常只允許管理員使用;
+* 控制台: 一個運行在終端視窗且包含許多控制台指令的應用程式或支援整個應用程式的排程工作。
+* Web 應用程式介面: 提供第三方介面來整合應用程式。
+
+子應用程式可以是用 [模組](/doc/guide/basics.module) 的方式實作,或是一個完整的 Yii 應用程式但與其他子應用程式共享程式碼。
+
+
+模型
+-----
+
+[模型](/doc/guide/basics.model) 代表與 Web 應用程式相關的資料結構,並且常常會在不同的子應用程式之間共享。例如,一個 `LoginForm` 模型可能會被前端和後端同時使用;一個 `News` 模型可能會被控制台命令、Web 應用程式介面和前/後端應用程式使用。因此,模型
+
+* 應該包含代表特定資料的屬性;
+
+* 應該包含商業邏輯 (例如:驗證規則) 來確保資料複合設計的需求。
+
+* 可能會包含操作資料的程式碼。例如,一個 'SearchForm' 模型,除了代表搜尋的輸入資料,也包含了一個搜尋方法來搜尋資料。
+
+有時候,遵循上述第三條規則可能會使得模型變得肥大,因為包含太多的程式碼。甚至,如果它有許多不同的功用,會造成這個模型更難維護。例如,一個 `News` 模型可能會有一個方法叫做 `getLatestNews` 只給前端使用;它也可能包含一個方法叫做 `getDeletedNews` 只給後端使用。對於一個中、小型的應用來說,或許這樣不錯。但是對於大型的應用程式,下面要介紹的策略或許比較適合:
+
+* 定義一個 `NewsBase` 模型類別只包含一些在不同子應用程式之間分享用的程式碼 (例如:前端、後端)
+
+* 在不同的子應用程式裡,定義一個 從 `NewsBase` 擴展出來的 `News` 模型,然後把相應的程式碼放置到相應的 `News` 模型裡。
+
+所以,拿上述的所舉的例子來說,前端的 `News` 模型就會有一個 `getLastestNews` 的方法,而後端的的 `News` 則是會有一個 `getDeletedNews` 方法。
+
+大致上來說,模型不應該包含處理終端使用者的邏輯。更詳細的說,模型
+
+* 不能使用 `$_GET` 和 `$_POST`,或是那些類似終端使用者的要求變數。記住一點,模型會被那些完全不相干的子應用程式所使用 (例如:單元測試和 Web 應用程式介面),並不是所有的變數都代表使用者的要求,這種與終端使用者需求有關的變數,應該要交由控制器來處理。
+
+* 應該避免內嵌 HTML 或是顯示畫面用的程式碼。因為不同的使用者要求,通常會有不同的畫面要顯示 (例如:前端和後端對於一則新聞的顯示方式可能完全不同),這需要交由視圖來處理。
+
+
+視圖
+----
+
+[視圖](/doc/guide/basics.view) 必須根據使用者所要求的格式來顯示模型。大致上,視圖
+
+* 主要包含用來顯示畫面的程式碼,像是 HTML 或是簡單的 PHP 程式碼用來循覽、格式化和呈現資料;
+
+* 必須避免執行資料庫查詢的程式碼。它們應該被放在模型裡。
+
+* 必須避免存許 `$_GET` 和 `$_POST`,或是那些類似終端使用者的要求變數。這是控制器的工作。視圖必須專注在控制器或是模型所提供的資料的顯示和布局,而不是試圖直接去存取要求變數或是資料庫。
+
+* 或許會直接存取控制器和模型的屬性和方法。但是,必須只是用來當作顯示的目的。
+
+
+視圖可以以不同的方式被重用:
+
+* 佈局:共同顯示的區域 (例如:頁面的頭部和底部) 可以放在佈局視圖。
+
+* 部分視圖:使用部分試圖 (不是佈局所使用的視圖) 來重用顯示程式碼的片段。例如,使用 `_form.php` 部分視圖來呈現模型在建立和更新時的輸入表單。
+
+* 小工具:如果,在呈現一個部份視圖需要有許多邏輯,那比較好的方式是把部份視圖轉換成小工具,並把邏輯的部分放在它的類別檔案裡。如果一個小工具需要產生許多 HTML 標記,最好的方式是使用含有這些標記的小工具。
+
+* 輔助類別:在視圖裡,我們常常會使用程式碼片段來完成一些小小的工作像是格式化資料或產生 HTML 標記。除了直接將程式碼放在視圖裡,還有一個更好的方法就是把它們放在視圖輔助類別裡,然後再視圖裡使用這個輔助類別。為此 Yii 提供了一個範例。Yii 有一個非常強而有力的 [CHtml] 輔助類別可以用來產生共同使用的 HTML 程式碼。輔助類別可以放在一個 [自動載入資料夾](/doc/guide/basics.namespace) 來使用而不必明確地宣告載入。
+
+
+控制器
+----------
+
+[控制器](/doc/guide/basics.controller) 是用來銜接模型、視圖和其他元件在一起成為一個可以運行的應用程式。控制器必須直接面對處理使用者的需求。因此,控制器
+
+* 可以存取 `$_GET`, `$_POST` 和那些類似終端使用者的要求變數;
+
+* 可以建立模型的實體和管理它們的生命週期。例如,一個典型的模型更新方法,控制器會先建立一個模型實體;然後將使用者輸入的 `$_POST` 帶入模型;在成功的儲存模型之後,控制器會將使用者的瀏覽器導向到描述模型頁面。注意一點,儲存模型的行為是在模型裡面完成,而不是控制器。
+
+* 應該避免內嵌 SQL 述句,它們應該被放置在模型裡。
+
+* 應該避免包含任何 HTML 或是顯示用的標記。他們應該被放置在視圖裡。
+
+
+在一個設計良好的 MVC 應用程式裡,控制器通常會非常的瘦小,可能只會包含些許的程式碼;而模型會非常的肥大,將包含那些必須用來展現或是操作的資料。這是因為一個模型的資料結構和邏輯通常屬於特定的應用領域,需要大量的客製化來達成需求;反觀控制器的邏輯則是遵循一種非常相似的模式,橫跨在不同的應用程式之間,進而可以藉由框架或是基礎類別來簡化。
+
+
+<div class="revision">$Id$</div>
View
156 docs/guide/zh_tw/basics.component.txt
@@ -0,0 +1,156 @@
+元件
+=========
+
+Yii 應用程式建立於元件之上。元件是 [CComponent] 或其子類別的實體。使用元件主要涉及訪問它的屬性以及觸發或處理它的時間。
+基礎類別 [CComponent] 指定了如何定義屬性和事件。
+
+元件屬性
+------------------
+
+元件的屬性就像物件的公共成員變數。它是可讀寫的。例如:
+
+~~~
+[php]
+$width=$component->textWidth; // 獲取 textWidth 屬性
+$component->enableCaching=true; // 設置 enableCaching 屬性
+~~~
+
+要定義一個元件屬性,我們只需在元件類別中定義一個公共成員變數即可。更靈活的方式是定義其 getter 和 setter 方法,例如:
+
+~~~
+[php]
+public function getTextWidth()
+{
+ return $this->_textWidth;
+}
+
+public function setTextWidth($value)
+{
+ $this->_textWidth=$value;
+}
+~~~
+
+上述程式碼定義了一個可寫的屬性名為 `textWidth` (不區分大小寫)。
+當讀取屬性時,`getTextWidth()` 就會被調用,其返回值則成為屬性值;相似的,
+當寫入屬性時,`setTextWidth()` 被調用。如果 setter 方法沒有定義,則屬性將是只讀的,
+如果對其寫入則會拋出一個異常。使用 getter 和 setter 方法定義一個屬性有一個好處:即當讀取或寫入屬性時,
+可以執行額外的邏輯(例如,執行驗證,觸發事件)。
+
+>Note|注意: 通過 getter / setter 定義的屬性和類別成員變數之間有一個細微的差異。前者的名字是大小寫不敏感的,
+而後者是有大小寫敏感。
+
+元件事件
+---------------
+
+元件事件是一些特殊的屬性,它們使用一些稱作 `事件處理 (event handlers)` 的方法作為其值。
+附加(分配)一個方法到一個事件將會引起方法在事件被喚起處自動被調用。因此,
+一個元件的行為可能會在元件開發過程中被不可預見的方式修改。
+
+元件事件以 `on` 開頭的命名方式定義。和屬性通過 getter/setter 方法來定義的命名方式一樣,
+事件的名稱是大小寫不敏感的。以下程式碼定義了一個 `onClicked` 事件:
+
+~~~
+[php]
+public function onClicked($event)
+{
+ $this->raiseEvent('onClicked', $event);
+}
+~~~
+
+這裡作為事件參數的 `$event` 是 [CEvent] 或其子類別的實體。
+
+我們可以附加一個方法到此 event,如下所示:
+
+~~~
+[php]
+$component->onClicked=$callback;
+~~~
+
+這裡的 `$callback` 指向了一個有效的 PHP 回調。它可以是一個全域函數也可以是類別中的一個方法。
+如果是後者,它必須以一個數組的方式提供: `array($object,'methodName')`。
+
+事件處理程序的結構如下:
+
+~~~
+[php]
+function methodName($event)
+{
+ ......
+}
+~~~
+
+這裡的 `$event` 即描述事件的參數(它來源於 `raiseEvent()` 調用)。`$event` 參數是 [CEvent] 或其子類別的實體。
+至少,它包含了關於誰觸發了此事件的訊息。
+
+從版本 1.0.10 開始,事件處理程序也可以是一個 PHP 5.3 以後所支援的匿名函數。例如,
+
+~~~
+[php]
+$component->onClicked=function($event) {
+ ......
+}
+~~~
+
+如果我們現在調用 `onClicked()`,`onClicked` 事件將被觸發(在 `onClicked()` 中),
+附屬的事件處理程序將被自動調用。
+
+一個事件可以綁定多個處理程序。當事件觸發時,
+這些處理程序將被按照它們綁定到事件時的順序依次執行。如果處理程序決定後續處理程序不被執行,它可以設置
+[$event->handled|CEvent::handled] 為 true。
+
+
+元件行為
+------------------
+
+從版本 1.0.2 開始,元件已增加了對 [mixin](http://en.wikipedia.org/wiki/Mixin) 的支援,並可以綁定一個或多個行為。
+*行為* 是一個物件,其方法可以被它綁定的部件通過收集功能的方式來實現 `繼承(inherited)`,
+而不是特定繼承(即普通的類別繼承)。一個元件可以以'多重繼承'的方式實現多個行為的綁定。
+
+行為類別必須實現 [IBehavior] 介面。 大多數行為可以繼承自 [CBehavior] 。如果一個行為需要綁定到一個 [模型](/doc/guide/basics.model),
+它也可以從專為模型實現綁定特性的 [CModelBehavior] 或
+[CActiveRecordBehavior] 繼承。
+
+要使用一個行為,它必須首先通過調用此行為的
+[attach()|IBehavior::attach] 方法綁定到一個元件。然後我們就可以通過元件調用此行為方法:
+
+~~~
+[php]
+// $name 在元件中實現了對行為的唯一識別
+$component->attachBehavior($name,$behavior);
+// test() 是行為中的方法。
+$component->test();
+~~~
+
+已綁定的行為可以像一個元件中的普通屬性一樣存取。
+例如:如果一個名為 `tree` 的行為綁定到了一個元件,我們就可以通過如下程式碼獲得指向此行為的引用。
+
+~~~
+[php]
+$behavior=$component->tree;
+// 等於下行程式碼:
+// $behavior=$component->asa('tree');
+~~~
+
+行為是可以被臨時禁止的,此時它的方法開就會在元件中失效。例如:
+
+~~~
+[php]
+$component->disableBehavior($name);
+// 下面的程式碼將拋出一個異常
+$component->test();
+$component->enableBehavior($name);
+// 現在就可以使用了
+$component->test();
+~~~
+
+兩個同名行為綁定到同一個元件下是有可能的。在這種情況下,先綁定的行為則擁有優先權。
+
+當和 [events](/doc/guide/basics.component#component-event),一起使用時,行為會更加強大。
+當行為被綁定到元件時,行為裡的一些方法就可以綁定到元件的一些事件上了。
+這樣一來,行為就有機會觀察或者改變元件的常規執行流程。
+
+自版本 1.1.0 開始,一個行為的屬性也可以通過綁定到的元件來訪問。
+這些屬性包含公共成員變數以及通過 getters 和/或 setters 方式設置的屬性。
+例如:若一個行為有一個 `xyz` 的屬性,此行為被綁定到元件 `$a`,然後我們可以使用表達式 `$a->xyz` 訪問此行為的屬性。
+
+<div class="revision">$Id$</div>
View
276 docs/guide/zh_tw/basics.controller.txt
@@ -0,0 +1,276 @@
+控制器
+==========
+
+`控制器` 是 [CController] 或其子類別的實體。它在當用戶請求時由應用程式建立。
+當一個控制器運行時,它執行所請求的動作,動作通常會載入所必要的模型並呈現相應的視圖。
+`動作` 最簡單的形式,就是一個名字以 `action` 開頭的控制器類別行為。
+
+控制器通常有一個預設的動作。當用戶的請求未指定要執行的動作時,預設動作將被執行。
+預設情況下,預設的動作名為 `index`。它可以通過設置 [CController::defaultAction] 修改。
+
+如下是一個 `Site` 控制器,擁有一個 `index` 動作 (預設動作) 和一個 `contact` 動作。
+
+~~~
+[php]
+class SiteController extends CController
+{
+ public function actionIndex()
+ {
+ // ...
+ }
+
+ public function actionContact()
+ {
+ // ...
+ }
+}
+~~~
+
+
+路由
+-----
+
+控制器和動作以 ID 識別。控制器 ID 是一種 'path/to/xyz' 的格式,對應相應的控制器類別檔案
+`protected/controllers/path/to/XyzController.php`, 其中的標誌 `xyz`
+應被替換為實際的名字 (例如 `post` 對應 `protected/controllers/PostController.php`).
+動作 ID 是除去 `action` 前綴的動作方法名。例如,如果一個控制器類別含有一個名為 `actionEdit`
+的方法,則相應的動作 ID 為 `edit`。
+
+> Note|注意: 在 1.0.3 版本之前,控制器 ID 的格式為 `path.to.xyz` ,而不是 `path/to/xyz`。
+
+用戶以路由的形式請求特定的控制器和動作。路由是由控制器 ID 和動作 ID 連接起來的,兩者以斜線分割。
+例如,路由 `post/edit` 代表 `PostController` 及其 `edit` 動作。預設情況下,URL
+`http://hostname/index.php?r=post/edit` 即請求此控制器和動作。
+
+>Note|注意: 預設情況下,路由是大小寫敏感的,從版本 1.0.1 開始,可以通過設置應用程式配置中的
+> [CUrlManager::caseSensitive] 為 false 使路由對大小寫不敏感。當在大小寫不敏感模式中時,
+>要確保你遵循了相應的規則約定,即:包含控制器類別檔案的目錄名小寫,且 [控制器映射|CWebApplication::controllerMap]
+>和 [動作映射|CController::actions] 中使用的鍵為小寫。
+
+從 1.0.3 版本開始,應用程式可以含有 [模組(Module)](/doc/guide/basics.module). 模組中,控制器動作的路由格式為 `moduleID/controllerID/actionID` 。
+更多詳情,請閱讀 [模組相關章節](/doc/guide/basics.module).
+
+
+控制器實體化
+------------------------
+
+控制器實體在 [CWebApplication] 處理送來的請求時建立。指定了控制器 ID ,
+應用程式將使用如下規則確定控制器的類別以及類別檔案的位置。
+
+ - 如果指定了 [CWebApplication::catchAllRequest] , 控制器將基於此屬性建立,
+而用戶指定的控制器 ID 將被忽略。這通常用於將應用程式設置為維護狀態並顯示一個靜態提示頁面。
+
+ - 如果在 [CWebApplication::controllerMap] 中找到了 ID, 相應的控制器配置將被用於建立控制器實體。
+
+ - 如果 ID 為 `'path/to/xyz'`的格式,控制器類別的名字將判斷為 `XyzController`,
+相應的類別檔案則為 `protected/controllers/path/to/XyzController.php`。例如,
+控制器 ID `admin/user` 將被解析為控制器類別 `UserController`,類別檔案是 `protected/controllers/admin/UserController.php`。
+如果類別檔案不存在,將觸發一個 404 [CHttpException] 異常。
+
+在使用了 [模組](/doc/guide/basics.module) (1.0.3 版後可用) 後,上述過程則稍有不同。
+具體來說,應用程式將檢查此 ID 是否代表一個模組中的控制器。如果是的話,模組實體將被首先建立,然後建立模組中的控制器實體。
+
+
+動作
+------
+
+如前文所述,動作可以被定義為一個以 `action` 單字作為前綴命名的方法。而更高級的方式是定義一個動作類別並讓控制器在收到請求時將其實體化。
+這使得動作可以被復用,提高了可復用度。
+
+要定義一個新動作類別,可用如下程式碼:
+
+~~~
+[php]
+class UpdateAction extends CAction
+{
+ public function run()
+ {
+ // place the action logic here
+ }
+}
+~~~
+
+為了讓控制器注意到這個動作,我們要用如下方式覆蓋控制器類別的[actions()|CController::actions] 方法:
+
+~~~
+[php]
+class PostController extends CController
+{
+ public function actions()
+ {
+ return array(
+ 'edit'=>'application.controllers.post.UpdateAction',
+ );
+ }
+}
+~~~
+
+如上所示,我們使用了路徑別名 `application.controllers.post.UpdateAction` 指定動作類別檔案為
+ `protected/controllers/post/UpdateAction.php`.
+
+通過編寫基於類別的動作,我們可以將應用程式組織為模組的風格。例如,
+如下目錄結構可用於組織控制器相關程式碼:
+
+~~~
+protected/
+ controllers/
+ PostController.php
+ UserController.php
+ post/
+ CreateAction.php
+ ReadAction.php
+ UpdateAction.php
+ user/
+ CreateAction.php
+ ListAction.php
+ ProfileAction.php
+ UpdateAction.php
+~~~
+
+### 動作參數綁定
+
+從版本 1.1.4 開始,Yii 提供了對自動動作參數綁定的支援。
+就是說,控制器動作可以定義命名的參數,參數的值將由 Yii 自動從 `$_GET` 提取。
+
+為了詳細說明此功能,假設我們需要為 `PostController` 寫一個 `create` 動作。此動作需要兩個參數:
+
+* `category`: 一個整數,代表文章(post)要發表在的那個分類別的 ID。
+* `language`: 一個字串,代表帖子所使用的語言程式碼。
+
+從 `$_GET` 中提取參數時,我們可以不再使用下面這種無聊的程式碼了:
+
+~~~
+[php]
+class PostController extends CController
+{
+ public function actionCreate()
+ {
+ if(isset($_GET['category']))
+ $category=(int)$_GET['category'];
+ else
+ throw new CHttpException(404,'invalid request');
+
+ if(isset($_GET['language']))
+ $language=$_GET['language'];
+ else
+ $language='en';
+
+ // ... fun code starts here ...
+ }
+}
+~~~
+
+現在使用動作參數功能,我們可以更輕鬆的完成任務:
+
+~~~
+[php]
+class PostController extends CController
+{
+ public function actionCreate($category, $language='en')
+ {
+ $category=(int)$category;
+
+ // ... fun code starts here ...
+ }
+}
+~~~
+
+注意我們在動作方法 `actionCreate` 中增加了兩個參數。
+這些參數的名字必須和我們想要從 `$_GET` 中提取的名字一致。
+當用戶沒有在請求中指定 `$language` 參數時,這個參數會使用預設值 `en` 。
+由於 `$category` 沒有預設值,如果用戶沒有在 `$_GET` 中提供 `category` 參數,
+將會自動拋出一個 [CHttpException] (錯誤程式碼 400) 異常。
+
+從 1.1.5 之後的版本, Yii 也支援對動作參數的陣列型別的偵測。這是藉由 PHP 的型別提示來完成,語法如下:
+
+~~~
+[php]
+class PostController extends CController
+{
+ public function actionCreate(array $categories)
+ {
+ // Yii will make sure $categories be an array
+ }
+}
+~~~
+
+使用關鍵字 `array` 在參數 `$categories` 之前。所以,如果 `$_GET['categories']` 是一個字串,他就會被轉換成一個含有此字串的陣列。
+
+> Note|注意: 如果參數的宣告沒有 `array` 的型別提示,這代表該參數一定是個
+> 純量 (scalar) (例如,不是一個陣列). 在這種情況下,透過 `$_GET` 傳遞一個陣列參數
+> 會引發 HTTP 例外。
+
+
+
+過濾器
+------
+
+過濾器是一段程式碼,可被配置在控制器動作執行之前或之後執行。例如,存取控制過濾器將被執行以確保在執行請求的動作之前,用戶已通過身份驗證;性能過濾器可用於測量控制器執行所用的時間。
+
+一個動作可以有多個過濾器。過濾器執行順序為它們出現在過濾器列表中的順序。過濾器可以阻止動作及後面其他過濾器的執行
+
+過濾器可以定義為一個控制器類別的方法。方法名必須以 `filter` 開頭。例如,現有的 `filterAccessControl` 方法定義了一個名為 `accessControl` 的過濾器。
+過濾器方法必須為如下結構:
+
+~~~
+[php]
+public function filterAccessControl($filterChain)
+{
+ // 調用 $filterChain->run() 以繼續後續過濾器與動作的執行。
+}
+~~~
+
+其中的 `$filterChain` (過濾器鏈)是一個 [CFilterChain] 的實體,代表與所請求動作相關的過濾器列表。在過濾器方法中,
+我們可以調用 `$filterChain->run()` 以繼續執行後續過濾器和動作。
+
+過濾器也可以是一個 [CFilter] 或其子類別的實體。如下程式碼定義了一個新的過濾器類別:
+
+~~~
+[php]
+class PerformanceFilter extends CFilter
+{
+ protected function preFilter($filterChain)
+ {
+ // 動作被執行之前應用程式的邏輯
+ return true; // 如果動作不應被執行,此處返回 false
+ }
+
+ protected function postFilter($filterChain)
+ {
+ // 動作執行之後應用程式的邏輯
+ }
+}
+~~~
+
+要對動作應用程式過濾器,我們需要覆蓋
+`CController::filters()` 方法。此方法應返回一個過濾器配置數組。例如:
+
+~~~
+[php]
+class PostController extends CController
+{
+ ......
+ public function filters()
+ {
+ return array(
+ 'postOnly + edit, create',
+ array(
+ 'application.filters.PerformanceFilter - edit, create',
+ 'unit'=>'second',
+ ),
+ );
+ }
+}
+~~~
+
+上述程式碼指定了兩個過濾器: `postOnly` 和 `PerformanceFilter`。
+`postOnly` 過濾器是基於方法的(相應的過濾器方法已在 [CController] 中定義);
+而 `performanceFilter` 過濾器是基於物件的。路徑別名 `application.filters.PerformanceFilter`
+指定過濾器類別檔案是 `protected/filters/PerformanceFilter`。我們使用一個數組配置
+`PerformanceFilter` ,這樣它就可被用於初始化過濾器對象的屬性值。此處 `PerformanceFilter` 的 `unit` 屬性值將被初始為 `second`。
+
+使用加減號,我們可指定哪些動作應該或不應該應用程式過濾器。上述程式碼中, `postOnly`
+應只被應用程式於 `edit` 和 `create` 動作,而 `PerformanceFilter` 應被應用程式於 除了 `edit` 和 `create` 之外的動作。
+如果過濾器配置中沒有使用加減號,則此過濾器將被應用於所有動作。
+
+<div class="revision">$Id$</div>
View
128 docs/guide/zh_tw/basics.convention.txt
@@ -0,0 +1,128 @@
+規範
+===========
+
+Yii 偏愛規範勝於配置。遵循規範可使你能夠建立成熟的 Yii 應用程式而不需要撰寫、維護複雜的配置。
+當然了,在必要時,Yii 仍然可以通過配置來實現自行定義的所有東西。
+
+下面我們講解 Yii 開發中推薦的撰寫規範。
+為簡單起見,我們假設 `WebRoot` 是 Yii 應用程式安裝的目錄。
+
+URL
+---
+
+預設情況下,Yii 識別如下格式的 URL:
+
+~~~
+http://hostname/index.php?r=ControllerID/ActionID
+~~~
+
+這個 `r` GET 變數意義是
+[路由(route)](/doc/guide/basics.controller#route) ,它可以被 Yii 解析為 控制器和動作。
+如果 `ActionID` 被省略,控制器將使用預設的動作(在[CController::defaultAction]中定義);
+如果 `ControllerID` 也被省略(或者 `r` 變數不存在),應用程式將使用預設的控制器
+(在[CWebApplication::defaultController]中定義)。
+
+通過 [CUrlManager] 的幫助,可以建立更加可識別,更加 SEO 友好的 URL,例如
+`http://hostname/ControllerID/ActionID.html`。此功能在 [URL Management](/doc/guide/topics.url) 中有詳細講解。
+
+
+程式碼
+----
+
+Yii 推薦命名變數、函數和類別時使用 駝峰風格,即每個單字的首字母大寫並連在一起,中間無空格。
+變數名和函數名應該使它們的第一個單字全部小寫,以使其區別於類別名(例如:`$basePath`,
+`runController()`,`LinkPager`)。至於私有類別成員變數來說,我們推薦以下劃線作為其名字前綴(例如: `$_actionList`)。
+
+由於在 PHP 5.3.0 之前不支援名字空間,我們推薦類別要通過某種獨立的方式命名,以避免和第三方類別發生衝突。鑒於此,
+所有的 Yii 框架類別名以 "C" 作前綴。
+
+一個針對控制器名字的特殊規則是它們必須以單字 `Controller` 結尾。那麼控制器 ID 即類別名的首字母小寫並去掉單字 `Controller`。
+例如:`PageController` 類別的 ID 就是 `page` 。這個規則使應用程式更加安全。它還使控制器相關的URL更加簡單 (例如:`/index.php?r=page/index` 而不是 `/index.php?r=PageController/index`)。
+
+配置
+-------------
+
+配置是一個鍵值對陣列。每個鍵代表了所配置的對象中的屬性名,每個值則為相應屬性的初始值。
+例如: `array('name'=>'My
+application', 'basePath'=>'./protected')` 初始化了 `name` 和
+`basePath` 屬性為它們相應的陣列值。
+
+類別中任何可寫的屬性都可以被配置。如果沒有配置,屬性將使用它們的預設值。
+當配置一個屬性時,最好閱讀相應文件以保證初始值正確。
+
+文件
+----
+
+命名和使用文件的規範取決於它們的類別型。
+
+類別文件應以它們包含的公有類別命名。例如, [CController] 類別位於 `CController.php` 文件中。
+公有類別是可以被任何其他類別使用的類別。每個類別文件應包含最多一個公有類別。
+私有類別(只能被一個公有類別使用的類別)可以放在使用此類別的共同類別所在的文件中。
+
+視圖文件應以視圖的名字命名。例如, `index` 視圖位於 `index.php` 文件中。
+視圖文件是一個 PHP 腳本文件,它包含了用於呈現內容的 HTML 和 PHP 程式碼。
+
+配置文件可以任意命名。
+配置文件是一個PHP腳本,它的主要目的是返回一個體現配置的關聯陣列。
+
+目錄
+---------
+
+Yii 假定了一系列預設的目錄用於不同的場合。如果需要,每個目錄都可以自定。
+
+ - `WebRoot/protected`: 這是 [應用程式基礎目錄](/doc/guide/basics.application#application-base-directory),
+ 是放置所有安全敏感的 PHP 腳本和資料文件的地方。Yii 有一個預設的 `application` 別名指向此目錄。
+此目錄及目錄中的文件應該保護起來防止 Web 用戶訪問。它可以通過 [CWebApplication::basePath] 自定。
+
+ - `WebRoot/protected/runtime`: 此目錄放置應用程式在運行時產生的私有臨時文件。
+此目錄必須對 Web 伺服器進程可寫。它可以通過 [CApplication::runtimePath] 自定。
+
+ - `WebRoot/protected/extensions`: 此目錄放置所有第三方擴展。
+它可以通過 [CApplication::extensionPath] 自定。
+
+ - `WebRoot/protected/modules`: 此目錄放置所有的應用程式
+[模組](/doc/guide/basics.module),每個模組使用一個子目錄。
+
+ - `WebRoot/protected/controllers`: 此目錄放置所有控制器類別文件。
+它可以通過 [CWebApplication::controllerPath] 自定。
+
+ - `WebRoot/protected/views`: 此目錄放置所有視圖文件,
+包含控制器視圖,佈局視圖和系統視圖。
+它可以通過 [CWebApplication::viewPath] 自定。
+
+ - `WebRoot/protected/views/ControllerID`: 此目錄放置單個控制器類別中使用的視圖文件。
+此處的 `ControllerID` 是指控制器的 ID 。它可以通過 [CController::viewPath] 自定。
+
+ - `WebRoot/protected/views/layouts`: 此目錄放置所有佈局視圖文件。它可以通過
+[CWebApplication::layoutPath] 自定。
+
+ - `WebRoot/protected/views/system`: 此目錄放置所有系統視圖文件。
+系統視圖文件是用於顯示異常和錯誤的樣板。它可以通過 [CWebApplication::systemViewPath]
+自定。
+
+ - `WebRoot/assets`: 此目錄放置公共資源文件。
+資源文件是可以被發佈的,可由 Web 用戶訪問的私有文件。此目錄必須對 Web 伺服器進程可寫。
+它可以通過 [CAssetManager::basePath] 自定
+
+ - `WebRoot/themes`: 此目錄放置應用程式使用的不同的主題。每個子目錄即一個主題,主題的名字即目錄的名字。
+它可以通過 [CThemeManager::basePath] 自定。
+
+資料庫
+--------
+
+多數 Web 應用程式是由資料庫驅動的。為了最佳時間,我們
+推薦在對表和列命名時使用如下命名規範。注意,這些規範並不是 Yii 所必須的。
+
+ - 資料庫表名和列名都使用小寫命名。
+
+ - 名字中的單字應使用下劃線分割 (例如 `product_order`)。
+
+ - 對於表名,你既可以使用單數也可以使用複數。但
+不要 同時使用兩者。為簡單起見,我們推薦使用單數名字。
+
+ - 表名可以使用一個通用前綴,例如 `tbl_` 。這樣當應用程式所使用的表和另一個應用程式說使用的表共存於同一個資料庫中時就特別有用。
+這兩個應用程式的表可以通過使用不同的表前綴很容易地區別開。
+
+
+
+<div class="revision">$Id$</div>
View
29 docs/guide/zh_tw/basics.entry.txt
@@ -0,0 +1,29 @@
+入口腳本
+============
+
+入口腳本是處理用戶的初始引導的 PHP 腳本。它是唯一一個用戶可直接請求執行的 PHP 腳本。
+
+多數情況下,一個 Yii 應用程式的入口腳本包含像下面這樣簡單的腳本:
+
+~~~
+[php]
+// 在發行環境中請刪除此行
+defined('YII_DEBUG') or define('YII_DEBUG',true);
+// 包含 Yii 引導文件
+require_once('path/to/yii/framework/yii.php');
+// 建立一個應用程式實體並執行
+$configFile='path/to/config/file.php';
+Yii::createWebApplication($configFile)->run();
+~~~
+
+腳本首先包含了 Yii 框架的引導文件 `yii.php`。然後他按指定的配置建立了一個 Web 應用程式實體並執行。
+
+除錯模式
+----------
+
+Yii 應用程式可以按常數 `YII_DEBUG` 的值運行在除錯或發行模式。預設情況下,此常數值定義為 `false`,
+意為發行模式。要運行在除錯模式中則需要在包含 `yii.php` 文件之前定義此常量為 `true`。
+在除錯模式中運行應用程式效能較低,因為它要維護許多內部日誌。另一角度講,除錯模式在開發環境中非常有用,
+因為它在錯誤產生時提供了豐富的除錯訊息。
+
+<div class="revision">$Id$</div>
View
20 docs/guide/zh_tw/basics.model.txt
@@ -0,0 +1,20 @@
+模型
+=====
+
+模型是 [CModel] 或其子類別的實體。模型用於保持資料以及與其相關的商業邏輯。
+
+模型是單獨的資料物件。它可以是資料表中的一行,或者一個用戶輸入的表單。
+資料物件的每個字段對應模型中的一個屬性。每個屬性有一個標籤(label),
+並且可以通過一系列規則進行驗證。
+
+Yii 實現了兩種類別型的模型:表單模型和 Active Record。二者均繼承於相同的基類別 [CModel]。
+
+表單模型是 [CFormModel] 的實例。表單模型用於保持從用戶的輸入獲取的資料。
+這些資料經常被獲取,使用,然後丟棄。例如,在一個登錄頁面中,
+我們可以使用表單模型用於表示由最終用戶提供的用戶名和密碼訊息。更多詳情,請參考 [使用表單](/doc/guide/form.model)。
+
+Active Record (AR) 是一種用於通過物件導向的方式抽像化資料庫存取的設計模式。
+每個 AR 物件是一個 [CActiveRecord] 或其子類別的實體。代表資料表中的一行。
+行中的字串對應 AR 對像中的屬性。更多關於 AR 的細節請閱讀 [Active Record](/doc/guide/database.ar).
+
+<div class="revision">$Id$</div>
View
100 docs/guide/zh_tw/basics.module.txt
@@ -0,0 +1,100 @@
+模組
+======
+
+> Note|注意: 版本 1.0.3 起支援模組。
+
+模組是一個獨立的軟體單元,它包含 [模型](/doc/guide/basics.model), [視圖](/doc/guide/basics.view), [控制器](/doc/guide/basics.controller) 和其他支援的元件。
+在許多方面上,模組看起來像一個 [應用程式](/doc/guide/basics.application)。主要的區別就是模組不能單獨部署,它必須存在於一個應用程式裡。
+用戶可以像他們存取普通應用程式的控制器那樣存取模組中的控制器。
+
+模組在一些場景裡很有用。對大型應用程式來說,我們可能需要把它劃分為幾個模組,每個模組可以單獨維護和部署。一些通用的功能,例如:用戶管理,
+評論管理,可以以模組的形式開發,這樣他們就可以容易地在以後的專用中被重用。
+
+
+建立模組
+---------------
+
+模組組織在一個目錄中,目錄的名字即模組的唯一 [ID|CWebModule::id] 。
+模組目錄的結構跟 [應用程式基礎目錄](/doc/guide/basics.application#application-base-directory) 很相似。下面列出了一個 `fourm` 的模組的典型的目錄結構:
+
+~~~
+forum/
+ ForumModule.php 模組類別檔案
+ components/ 包含可重用的用戶元件
+ views/ 包含小工具的視圖檔案
+ controllers/ 包含控制器類別檔案
+ DefaultController.php 預設的控制器類別檔案
+ extensions/ 包含第三方擴展
+ models/ 包含模組類別檔案
+ views/ 包含控制器視圖和佈局檔案
+ layouts/ 包含佈局檔案
+ default/ 包含 DefaultController 的視圖檔案
+ index.php 首頁視圖檔案
+~~~
+
+模組必須有一個繼承自 [CWebModule] 的模組類別。類別的名字通過表達式 `ucfirst($id).'Module'` 確定, 其中的 `$id` 代表模組的 ID (或者說模組的目錄名字)。
+模組類別是儲存模組程式碼間可共享訊息的中心位置。例如,我們可以使用 [CWebModule::params] 儲存模組參數,使用 [CWebModule::components] 分享模層的 [應用程式元件](/doc/guide/basics.application#application-component) .
+
+> Tip|提示: 我們可以使用 Gii 中的模組建立器建立新模組的基本骨架。
+
+
+使用模組
+------------
+
+要使用模組,首先將模組目錄放在 [應用程式基礎目錄](/doc/guide/basics.application#application-base-directory) 的 `modules` 中。
+然後在應用程式的 [modules|CWebApplication::modules] 屬性中聲明模組 ID 。例如,為了使用上面的 `forum` 模組,
+我們可以使用如下 [應用程式配置](/doc/guide/basics.application#application-configuration):
+
+~~~
+[php]
+return array(
+ ......
+ 'modules'=>array('forum',...),
+ ......
+);
+~~~
+
+模組也可以在配置時帶有初始屬性值。做法和配置 [應用程式元件](/doc/guide/basics.application#application-component) 很類別似。
+例如: `forum` 模組可以在其模組類別中有一個名為 `postPerPage` 的屬性,它可以在 [應用程式配置](/doc/guide/basics.application#application-configuration) 中配置如下:
+
+~~~
+[php]
+return array(
+ ......
+ 'modules'=>array(
+ 'forum'=>array(
+ 'postPerPage'=>20,
+ ),
+ ),
+ ......
+);
+~~~
+
+模組的實例可通過當前活動控制器的 [module|CController::module] 屬性存取。在模組實例中,我們可以存取在模組級中共享的訊息。
+例如:為存取上面的 `postPerPage` 訊息,我們可使用如下表達式:
+
+~~~
+[php]
+$postPerPage=Yii::app()->controller->module->postPerPage;
+// or the following if $this refers to the controller instance
+// $postPerPage=$this->module->postPerPage;
+~~~
+
+模組中的控制器動作可以通過 [路由](/doc/guide/basics.controller#route) `moduleID/controllerID/actionID` 存取。
+例如:假設上面的 `forum` 模組有一個名為 `PostController` 的控制器,我們就可以通過 [路由](/doc/guide/basics.controller#route) `forum/post/create` 存取此控制器中的 `create` 動作。
+此路由對應的 URL 即 `http://www.example.com/index.php?r=forum/post/create`。
+
+> Tip|提示: 如果一個控制器位於 `controllers` 目錄的子目錄中,我們仍然可以使用上述 [路由](/doc/guide/basics.controller#route) 格式。
+例如:假設 `PostController` 位於 `forum/controllers/admin` 中,我們可以通過 `forum/admin/post/create` 存取 `create` 動作。
+
+
+巢狀的模組
+-------------
+
+模組可以無限級巢狀。這就是說,一個模組可以包含另一個模組,而這另一個模組又可以包含其他模組。我們稱前者為 *父模組* ,後者為 *子模組*.
+子模組必須定義在其父模組的 [modules|CWebModule::modules] 屬性中,就像我們前面在應用程式配置中定義模組一樣。
+
+要存取子模組中的控制器動作,我們應使用路由 `parentModuleID/childModuleID/controllerID/actionID`.
+
+
+<div class="revision">$Id$</div>
View
42 docs/guide/zh_tw/basics.mvc.txt
@@ -0,0 +1,42 @@
+模型-視圖-控制器 (MVC)
+===========================
+
+Yii 使用了 Web 開發中大量採用的模型-視圖-控制器(MVC)設計模式。
+MVC 的目標是將商業邏輯從用戶界面的中分離,這樣開發者就可以更容易地改變每一部分而不會影響其他。
+在 MVC中,模型代表訊息(資料)和商業規則;視圖包含了用戶界面元素,例如文字,表單等;
+控制器則管理模型和視圖中的溝通。
+
+除了 MVC, Yii 還導入了一個前端控制器,叫做`應用程式`,它封裝了請求處理的執行上下文。
+應用程式處理用戶的請求並將其分派到一個合適的控制器以繼續處理。
+
+下面的示意圖展示了 Yii 應用程式的靜態結構:
+
+![Yii 應用程式的靜態結構](structure.png)
+
+
+一個典型的工作流程
+------------------
+下圖展示了一個 Yii 應用程式在處理用戶請求時典型的工作流。
+
+![一個典型的 Yii 應用程式工作流程](flow.png)
+
+ 1. 用戶發出了存取 URL `http://www.example.com/index.php?r=post/show&id=1` 的請求,
+Web 伺服器器通過執行入口腳本 `index.php` 處理此請求。
+ 2. 入口腳本建立了一個 [應用程式](/doc/guide/basics.application) 實體並執行。
+ 3. 應用程式從一個叫做 `request` 的 [應用程式元件](/doc/guide/basics.application#application-component)
+中獲得了用戶請求的詳細訊息。
+ 4. 應用程式在一個叫做 `urlManager` 的應用程式元件的幫助下,決定請求的 [控制器](/doc/guide/basics.controller)
+和 [動作](/doc/guide/basics.controller#action) 。在這個例子中,控制器是 `post`,它代表 `PostController` 類別;
+動作是 `show` ,其真正的代表意義是由控制器決定。
+ 5. 應用程式建立了一個所請求控制器的實例以進一步處理用戶請求。控制器決定了動作
+`show` 指向控制器類別中的一個名為 `actionShow` 的方法。然後它建立並持行了與動作關聯的過濾器(例如存取控制,基準測試)。
+如果過濾器允許,動作將被執行。
+ 6. 動作從資料庫中讀取一個 ID 為 `1` 的 `Post` [模型](/doc/guide/basics.model)。
+ 7. 動作通過 `Post` 模型渲染一個名為 `show` 的 [視圖](/doc/guide/basics.view)。
+ 8. 視圖讀取並顯示 `Post` 模型的屬性。
+ 9. 視圖執行一些 [小工具](/doc/guide/basics.view#widget)。
+ 10. 視圖的呈現結果被插入一個 [佈局](/doc/guide/basics.view#layout)。
+ 11. 動作完成視圖呈現並將其呈現給用戶。
+
+
+<div class="revision">$Id$</div>
View
239 docs/guide/zh_tw/basics.namespace.txt
@@ -0,0 +1,239 @@
+路徑別名與命名空間
+========================
+
+Yii 中廣泛的使用了路徑別名。路徑別名關聯於一個目錄或文件的路徑。它以點語法指定,類別似於廣泛使用的命名空間(namespace)格式:
+
+~~~
+RootAlias.path.to.target
+~~~
+
+其中的 `RootAlias` 是某個現存目錄的別名。
+
+通過使用 [YiiBase::getPathOfAlias()], 別名可以被翻譯為其相應的路徑。
+例如: `system.web.CController` 會被翻譯為 `yii/framework/web/CController`。
+
+通過調用 [YiiBase::setPathOfAlias()],我們可以定義新的根路徑別名。
+
+
+根路徑別名
+----------
+
+為方便起見,Yii 預定義了以下幾個根別名:
+
+ - `system`: 表示 Yii 框架目錄;
+ - `zii`: 表示 [Zii 函式庫](/doc/guide/extension.use#zii-extensions) 目錄;
+ - `application`: 表示應用程式的 [基礎目錄](/doc/guide/basics.application#application-base-directory);
+ - `webroot`: 表示 [入口腳本](/doc/guide/basics.entry) 文件所在的目錄。此別名從版本 1.0.3 開始有效。
+ - `ext`: 表示包含了所有第三方 [擴展](/doc/guide/extension.overview) 的目錄。此別名從版本 1.0.8 開始有效。
+
+額外的,如果應用程式使用了 [模組](/doc/guide/basics.module), (Yii) 也為每個模組 ID 定義了根別名,指向相應模組的根目錄。
+此功能從版本 1.0.3 起有效。
+
+通過使用 [YiiBase::getPathOfAlias()], 別名可以被翻譯為其相應的路徑。
+例如: `system.web.CController` 會被翻譯為 `yii/framework/web/CController`。
+
+
+載入類別
+-----------------
+
+使用別名可以很方便的導入類別的定義。
+例如:如果我們想包含 [CController] 類別的定義,我們可以調用如下程式碼
+
+~~~
+[php]
+Yii::import('system.web.CController');
+~~~
+
+[import|YiiBase::import] 方法跟 `include` 和 `require` 不同,它更加有效率。
+導入(import)的類別定義並不會真正被包含進來,直到它第一次被引用。
+多次導入同樣的命名空間也會比 `include_once` 和 `require_once` 快得多。
+
+> Tip|提示: 當引用 Yii 框架定義的類別時,我們不需要導入或包含它。所有的核心 Yii
+類別都已被提前導入了。
+
+###使用類別映射
+
+從1.1.5版本開始,Yii允許用戶定義的類別通過使類別映射機制來預先導入,這也是 Yii 核心類別使用的方法。
+預先引入機制可以在Yii應用程式的任何地方使用,無需顯式地導入或者包含檔案。這個特性對於一個建立在 Yii 基礎上的框架或者類別庫來說很有用。
+
+若要使用預先載入功能,要在 [CWebApplication::run()] 執行前執行下面的程式碼:
+
+~~~
+[php]
+Yii::$classMap=array(
+ 'ClassName1' => 'path/to/ClassName1.php',
+ 'ClassName2' => 'path/to/ClassName2.php',
+ ......
+);
+~~~
+
+
+載入目錄
+---------------------
+
+我們還可以使用如下語法載入整個目錄,這樣此目錄下的類別文件就會在需要時被自動包含。
+
+~~~
+[php]
+Yii::import('system.web.*');
+~~~
+
+除 [import|YiiBase::import] 外, 別名還在其他許多地方指向類別。
+例如:路徑別名可以傳遞給 [Yii::createComponent()] 以建立相應類別的實例。
+即使類別文件在之前從未被包含。
+
+
+命名空間
+---------
+
+不要將路徑別名和命名空間混淆了,命名空間是指對一些類別名的一個邏輯組合,這樣它們就可以相互區分開,即使有相同的名字。
+而路徑別名是用於指向一個類別文件或目錄。路徑別名與命名空間並不衝突。
+
+> Tip|提示: 由於 5.3.0 版本之前的 PHP 本質上不支援命名空間,所以無法建立兩個具有相同名字但不同定義的類別實體。
+有鑒於此,所有的 Yii 框架類別都以字母 'C'(意為 'Class') 作前綴,這樣它們可以區分於用戶定義的類別。我們建議前綴 'C'
+只保留給 Yii 框架使用,用戶定義的類別則使用其他的字母作前綴。
+
+
+使用命名空間的類別
+------------------
+
+使用命名空間的類別是指一個在非全域命名空間下宣告的類別。比如說,類別 `application\components\GoogleMap`
+是在命名空間 `application\components` 下的類別。使用命名空間需要 PHP 5.3.0 或者以上版本。
+
+從 1.1.5 開始,可以無需清楚的載入而使用一個包含命名空間的類別。比如說,我們可以建立一個 `application\components\GoogleMap`
+的實體而無需去處理載入的路徑,這樣就增強了 Yii 的自動導入機制。
+
+若要自動導入使用命名空間的類別,命名空間的格式必須和路徑別名相似。比如說,類別 `application\components\GoogleMap`
+所對應的路徑必須和別名 `application.components.GoogleMap` 一致。
+
+所以,要使用自訂的命名空間,其開頭是 `\mynamespace` 且位於 `/var/www/common/mynamespace/` 的類別,你只需要定義他的路徑別名如下:
+
+~~~
+[php]
+Yii::setPathOfAlias('mynamespace', '/var/www/common/mynamespace/');
+~~~
+
+
+命名空間的控制器
+----------------------
+
+Yii 預設是使用全域命名空間的控制器,這些類別位於 `protected/controllers`,有兩種方式可以改變他的行為:使用 `controllerMap` 或是 `controllerNamespace`。前者允許在不同的命名空間使用控制器,後者則需要在為所有控制器設定一個共同的命名空間時做一些額外的設定。
+
+### 使用 `controllerMap`
+
+改變控制器映射最好的方法是使用透過這個設定檔
+(`protected/config/main.php`):
+
+~~~
+[php]
+// 增加 "mynamespace" 命名空間
+Yii::setPathOfAlias('mynamespace', '/var/www/common/mynamespace/');
+
+return array(
+ 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
+ 'name'=>'My Web Application',
+
+ 'controllerMap' => array(
+ 'test' => '\mynamespace\controllers\TestController',
+ ),
+~~~
+
+當使用者試著載入 `controllerMap` 中定義的任一個控制器,Yii 不會透過一般控制器的載入方式來載入類別。在 `test` 情況下,Yii 會載入位於 `/var/www/common/mynamespace/controllers/TestController.php` 這個命名空間的類別 `\mynamespace\controllers\TestController`。
+
+注意控制器的程式碼必須正確的給予命名空間:
+
+~~~
+[php]
+// 定義命名空間:
+namespace mynamespace\controllers;
+
+// 現在類別已置於命名空間裡,全域的命名空間
+// 必須明確地使用 "\":
+class TestController extends \CController
+{
+ public function actionIndex()
+ {
+ echo 'This is TestController from \mynamespace\controllers';
+ }
+}
+~~~
+
+
+### 使用 `controllerNamespace`
+
+當應用程式本身就是一個模組時,你可以在如下所示的 "命名空間模組" 的 `controllerNamespace` 屬性使用同樣的方式。
+
+命名空間模組
+------------------
+
+有時候對整個模組給予一個命名空間是很有幫助的。例如:如果想要將位於 `\mynamespace\modules\testmodule` 的 `testmodule` 對應到 `/var/www/common/mynamespace/modules/testmodule`,你必須建立如下的檔案結構。
+
+~~~
+/var/www/common/mynamespace/modules
+ testmodule
+ controllers
+ DefaultController.php
+ views
+ default
+ index.php
+ TestmoduleModule.php
+~~~
+
+`index.php` 視圖跟在一般的模組裡一樣。 `TestmoduleModule.php` 和 `DefaultController.php` 則是被置於命名空間。
+
+`TestmoduleModule.php`:
+
+~~~
+[php]
+// 定義命名空間:
+namespace mynamespace\modules\testmodule;
+
+// 現在類別已置於命名空間裡,全域的命名空間
+// 必須明確地使用 "\":
+class TestmoduleModule extends \CWebModule
+{
+ // 設定非全域的控制器命名空間 (也可以藉由設定檔完成)
+ public $controllerNamespace = '\mynamespace\modules\testmodule\controllers';
+
+ // 其他的模組程式碼
+}
+~~~
+
+`DefaultController.php`:
+
+~~~
+[php]
+<?php
+// 定義命名空間:
+namespace mynamespace\modules\testmodule\controllers;
+
+// 現在類別已置於命名空間裡,全域的命名空間
+// 必須明確地使用 "\":
+class DefaultController extends \Controller
+{
+ public function actionIndex()
+ {
+ $this->render('index');
+ }
+}
+~~~
+
+現在唯一要做的事情是要把模組加入應用程式裡。最好的方法是在應用程式的設定檔設定它 (`protected/config/main.php`):
+
+~~~
+[php]
+// 增加 "mynamespace" 命名空間
+Yii::setPathOfAlias('mynamespace', '/var/www/common/mynamespace/');
+
+return array(
+ 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
+ 'name'=>'My Web Application',
+
+ 'modules'=>array(
+ 'testmodule' => array(
+ 'class' => '\mynamespace\modules\testmodule\TestModuleModule',
+ ),
+ ),
+~~~
+
+<div class="revision">$Id$</div>
View
100 docs/guide/zh_tw/basics.view.txt
@@ -0,0 +1,100 @@
+視圖
+====
+
+視圖主要是一個包含用戶介面元素的 PHP 腳本.他可以包含 PHP 語句,但是我們建議這些語句不要去改變資料模型,且最好能夠保持其單純性 (單純作為視圖)。為了實現邏輯和界面分離,大段的邏輯應該被放置於控制器或模型中,而不是視圖中。
+
+視圖有一個名字,當呈現 (render) 時,名字會被用於識別視圖腳本檔案。視圖的名稱與其視圖腳本名稱是一樣的,例如:視圖 `edit` 的名稱出自一個名為 `edit.php` 的腳本檔案。要呈現時,需通過傳遞視圖的名稱來調用 [CController::render()]。這個方法將在 `protected/views/ControllerID` 目錄下尋找對應的視圖檔案。
+
+在視圖腳本內部,我們可以通過 `$this` 來存取控制器實體.我們可以在視圖裡以 `$this->propertyName` 的方式 `拉取` 控制器的任何屬性.
+
+我們也可以用以下 `推送` 的方式傳遞資料到視圖裡:
+
+~~~
+[php]
+$this->render('edit', array(
+ 'var1'=>$value1,
+ 'var2'=>$value2,
+));
+~~~
+
+在以上的方式中, [render()|CController::render] 方法將提取數組的第二個參數到變量裡。其產生的結果,是在視圖腳本裡,我們可以直接存取變數 `$var1` 和 `$var2`。
+
+佈局
+------
+
+佈局是一種用來修飾視圖的特殊的視圖檔案,它通常包含了用戶界面中通用的一部分視圖。例如:佈局可以包含 header 和 footer 的部分,然後把內容嵌入其間。
+
+~~~
+[php]
+......header here......
+<?php echo $content; ?>
+......footer here......
+~~~
+
+其中的 `$content` 則儲存了內容視圖的呈現結果。
+
+當使用 [render()|CController::render] 時,應用程式是看不到布局的。視圖腳本 `protected/views/layouts/main.php` 是預設的佈局檔案,這可以通過改變 [CWebApplication::layout] 或 [CWebApplication::layout] 自行定義。要呈現一個不帶佈局的視圖,則需調用 [renderPartial()|CController::renderPartial] 。
+
+小工具
+------
+
+小工具是 [CWidget] 或其子類別的實體,主要是用於表現資料的元件。小工具通常內嵌於一個視圖來產生一些複雜而獨立的用戶界面,例如:一個日曆小工具可用於呈現一個複雜的日曆界面。小工具使用戶界面重用性更高。
+
+我們可以按如下視圖腳本來使用一個小工具:
+
+~~~
+[php]
+<?php $this->beginWidget('path.to.WidgetClass'); ?>
+...可能會由小工具獲取的內容主體...
+<?php $this->endWidget(); ?>
+~~~
+
+或者
+
+~~~
+[php]
+<?php $this->widget('path.to.WidgetClass'); ?>
+~~~
+
+後者用於不需要任何主體內容的元件.
+
+小工具可通過配置來設定它的關,這是通過調用 [CBaseController::beginWidget] 或 [CBaseController::widget] 設置其初始化的屬性值來完成。例如:當使用 [CMaskedTextField] 小工具時,我們想指定被使用的遮罩,我們通過傳遞一個帶有這些屬性初始化值的陣列來實現。這裡的陣列的鍵是屬性的名稱,而陣列的值則是小工具屬性所對應的值。正如以下所示 :
+~~~
+[php]
+<?php
+$this->widget('CMaskedTextField',array(
+ 'mask'=>'99/99/9999'
+));
+?>
+~~~
+
+繼承 [CWidget] 並覆蓋其 [init()|CWidget::init] 和 [run()|CWidget::run] 方法,可以定義一個新的小工具:
+
+~~~
+[php]
+class MyWidget extends CWidget
+{
+ public function init()
+ {
+ // 此方法會被 CController::beginWidget() 調用
+ }
+
+ public function run()
+ {
+ // 此方法會被 CController::endWidget() 調用
+ }
+}
+~~~
+
+小工具可以像一個控制器一樣擁有它自己的視圖。預設情況下,小工具的視圖檔案位於包含了小工具類別檔案目錄的 `views` 子目錄之下。這些視圖可以通過調用 [CWidget::render()] 來呈現,這一點和控制器很相似.唯一不同的是,小工具的視圖沒有佈局支援。另外,小工具視圖中的 `$this` 指向小工具實體而不是控制器實體。
+
+系統視圖
+-----------
+
+系統視圖的呈現通常用於展示 Yii 的錯誤和日誌訊息。例如,當用戶請求一個不存在的控制器或動作時,Yii 會拋出一個異常來解釋這個錯誤。這時, Yii 就會使用一個特殊的系統視圖來顯示此錯誤。
+
+系統視圖的命名遵從了一些規則,比如像 `errorXXX` 這樣的名稱就是用於呈現展示錯誤號 `XXX` 的 [CHttpException] 的視圖。例如,如果 [CHttpException] 拋出一個 404 錯誤,那麼 `error404` 就會被顯示。
+
+在 `framework/views` 下, Yii 提供了一系列預設的系統視圖,他們可以通過在 `protected/views/system` 下建立同名視圖檔案進行自定。
+
+<div class="revision">$Id$</div>
View
37 docs/guide/zh_tw/basics.workflow.txt
@@ -0,0 +1,37 @@
+開發流程
+====================
+
+介紹過 Yii 中的基本概念之後,我們現在講解使用 Yii 開發 Web 應用程式時的一般開發流程。
+此處的開發流程假設我們已經完成了對應用程式的需求分析和必要的設計分析。
+
+ 1. 建立目錄結構骨架。[建立第一個Web應用程式](/doc/guide/quickstart.first-app) 中講到的
+`yiic` 工具可以快速實現此步驟。
+
+ 2. 配置此 [應用程式](/doc/guide/basics.application)。這是通過修改應用程式配置文件實現的。
+此步驟可能也需要編寫一些應用程式元件(例如用戶元件)。
+
+ 3. 為所管理的每個類別型的資料建立一個 [模型](/doc/guide/basics.model) 類別。
+[建立第一個應用程式](doc/guide/quickstart.first-app#implementing-crud-operations)
+和 [自動化程式碼產生](doc/guide/topics.gii) 中講述的 `Gii` 工具可以用於快速為每個資料表建立
+[active record](/doc/guide/database.ar) 類別。
+
+ 4.為每個類別型的用戶請求 建立一個 [控制器](/doc/guide/basics.controller) 類別。
+具體如何對用戶請求歸類別要看實際需求。總體來說,如果一個模型類別需要被用戶存取,他就應該有一個相應的控制器類別。
+`Gii` 工具也可以自動實現這一步驟。
+
+ 5. 實現 [動作](/doc/guide/basics.controller#action) 和他們相應的 [視圖](/doc/guide/basics.view)。
+這是真正所需要做的工作。
+
+ 6. 在控制器類別中配置必要的動作 [過濾器](/doc/guide/basics.controller#filter)。
+
+ 7. 如果需要主題功能,建立 [主題](/doc/guide/topics.theming) 。
+
+ 8. 如果需要 [國際化(I18N)](/doc/guide/topics.i18n) ,建立翻譯訊息。
+
+ 9. 對可快取的資料點和視圖點應用程式適當的 [快取](/doc/guide/caching.overview) 技術。
+
+ 10. 最終 [調整](/doc/guide/topics.performance) 與部署。
+
+上述的每個步驟中,測試範例可能需要被建立和執行。
+
+<div class="revision">$Id$</div>
View
196 docs/guide/zh_tw/caching.data.txt
@@ -0,0 +1,196 @@
+資料快取
+============
+
+資料快取即儲存一些 PHP 變數到快取中,以後再從快取中取出來。出於此目的,快取元件的基礎類別 [CCache]
+提供了兩個最常用的方法: [set()|CCache::set] 和 [get()|CCache::get]。
+
+要在快取中儲存一個變數 `$value` ,我們選擇一個唯一 ID 並調用 [set()|CCache::set] 儲存它:
+
+~~~
+[php]
+Yii::app()->cache->set($id, $value);
+~~~
+
+快取的資料將一直留在快取中,除非它由於某些快取策略(例如快取空間已滿,舊的資料被刪除)而被清除。
+要改變這種行為,我們可以在調用 [set()|CCache::set] 的同時提供一個過期參數,這樣在設定的時間段之後,快取資料將被清除:
+
+~~~
+[php]
+// 值 $value 在快取中最多保留 30 秒
+Yii::app()->cache->set($id, $value, 30);
+~~~
+
+稍後當我們需要存取此變數時(在同一個或不同的 Web 請求中),就可以通過 ID 調用 [get()|CCache::get] 從快取中將其取回。
+如果返回的是 false,表示此值在快取中不可用,我們應該重新產生它。
+
+~~~
+[php]
+$value=Yii::app()->cache->get($id);
+if($value===false)
+{
+ // 因為在快取中沒找到 $value ,重新產生它 ,
+ // 並將它存入快取以備以後使用:
+ // Yii::app()->cache->set($id,$value);
+}
+~~~
+
+為要存入快取的變數選擇 ID 時,要確保此 ID 對應用程式中所有其他存入快取的變數是唯一的。
+而在不同的應用程式之間,這個 ID 不需要是唯一的。快取元件具有足夠的智慧區分不同應用程式中的 ID。
+
+一些快取儲存裝置,例如 MemCache, APC, 支援以批次模式取得多個快取值。這可以減少取得快取資料時帶來的開銷。Yii 提供了一個名為 [mget()|CCache::mget] 的方法來完成此功能。如果底層快取儲存裝置不支援此功能,[mget()|CCache::mget] 依然可以模擬實現它。
+
+要從快取中清除一個快取值,調用 [delete()|CCache::delete]; 要清除快取中的所有資料,調用 [flush()|CCache::flush]。
+當調用 [flush()|CCache::flush] 時一定要小心,因為它會同時清除其他應用程式中的快取。
+
+> Tip|提示: 由於 [CCache] 實現了 `ArrayAccess`,快取元件也可以像一個陣列一樣使用。下面是幾個例子:
+> ~~~
+> [php]
+> $cache=Yii::app()->cache;
+> $cache['var1']=$value1; // 相當於: $cache->set('var1',$value1);
+> $value2=$cache['var2']; // 相當於: $value2=$cache->get('var2');
+> ~~~
+
+快取相依性
+----------------
+
+除了過期設置,快取資料也可能會因為相依性條件發生變化而失效。例如,如果我們快取了某些文件的內容,而這些文件發生了改變,我們就應該讓快取的資料失效,
+並從文件中讀取最新內容而不是從快取中讀取。
+
+我們將一個相依性關係顯示為一個 [CCacheDependency] 或其子類別的實體。
+當調用 [set()|CCache::set] 時,我們連同要快取的資料將其一同傳入。
+
+~~~
+[php]
+// 此值將在 30 秒後失效
+// 也可能因相依性的文件發生了變化而更快失效
+Yii::app()->cache->set($id, $value, 30, new CFileCacheDependency('FileName'));
+~~~
+
+現在如果我們通過調用 [get()|CCache::get] 從快取中取得 `$value` ,相依性關係將被檢查,如果發生改變,我們將會得到一個 false 值,表示資料需要被重新產生。
+
+下面是可用的快取相依性的簡要說明:
+
+ - [CFileCacheDependency]: 如果文件的最後修改時間發生改變,則相依性改變。
+
+ - [CDirectoryCacheDependency]: 如果目錄和其子目錄中的文件發生改變,則相依性改變。
+
+ - [CDbCacheDependency]: 如果指定 SQL 語句的查詢結果發生改變,則相依性改變。
+
+ - [CGlobalStateCacheDependency]: 如果指定的全域狀態發生改變,則相依性改變。全域狀態是應用程式中的一個跨請求、跨會話的變數。它是通過 [CApplication::setGlobalState()] 定義的。
+
+ - [CChainedCacheDependency]: 如果鏈中的任何相依性發生改變,則此相依性改變。
+
+ - [CExpressionDependency]: 如果指定的 PHP 表達式的結果發生改變,則相依性改變。
+
+
+查詢快取
+-------------
+
+從版本 1.1.7,Yii 開始支援查詢快取。建立在資料快取上,查詢快取儲存資料庫查詢的結果在快取中,藉此省下未來同樣的資料庫查詢要求的時間,直接由快取提供。
+
+> Info|提示: 某些資料庫(例如:[MySQL](http://dev.mysql.com/doc/refman/5.1/en/query-cache.html))也支援查詢快取的功能。跟 MySQL 相比,Yii 提供更有彈性且更有效率的查詢快取。
+
+
+### 啟用查詢快取
+
+要啟用查詢快取,確認 [CDbConnection::queryCacheID] 指定到一個有效的快取應用程式元件(預設是 `cache`)。
+
+
+### 一起使用資料存取物件和查詢快取
+
+要使用查詢快取,呼叫 [CDbConnection::cache()] 方法當我們進行資料庫查詢。如下所示:
+
+~~~
+[php]
+$sql = 'SELECT * FROM tbl_post LIMIT 20';
+$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post');
+$rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();
+~~~
+
+當執行上述述句,Yii 會先檢查快取是否包含有正要執行的 SQL 述句有效的快取結果。藉由下述三個條件驗證:
+
+- 如果快取包含該 SQL 述句索引的一個項目。
+- 如果該項目還沒過期(少於 1000 秒,從他被儲存在快取開始)
+- 如果相依性還沒被改變(最大的 `update_time` 值跟查詢結果被儲存在快取時一樣)
+
+如果上述條件都符合,快取結果會被直接從快取中回傳。否則,SQL 述句會被送到資料庫執行,執行結果會被儲存在快取中再回傳。
+
+
+### 一起使用 ActiveRecord 和查詢快取
+
+查詢快取可以跟 [Active Record](/doc/guide/database.ar) 一起使用。為此,我們呼叫一個相似的 [CActiveRecord::cache()] 方法如下:
+
+~~~
+[php]
+$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post');
+$posts = Post::model()->cache(1000, $dependency)->findAll();
+// 關聯式 AR 查詢
+$posts = Post::model()->cache(1000, $dependency)->with('author')->findAll();
+~~~
+
+這裡的 `cache()` 其實就是 [CDbConnection::cache()]。從內部觀察,當執行 AR 產生的 SQL 述句,Yii 會嘗試使用我們上述的查詢快取。
+
+
+### 快取多個查詢
+
+預設,每次我們呼叫 `cache()` 方法(不論 [CDbConnection] 或 [CActiveRecord]),他會把下個要執行的 SQL 查詢標記快取。其他的 SQL 查詢就不會被快取,除非我們再次呼叫 `cache()`。例如,
+
+~~~
+[php]
+$sql = 'SELECT * FROM tbl_post LIMIT 20';
+$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post');
+
+$rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();
+// 查詢快取不會被使用
+$rows = Yii::app()->db->createCommand($sql)->queryAll();
+~~~
+
+藉由提供額外的 `$queryCount` 參數給 `cache()` 方法,我們可以強迫多個查詢使用查詢快取。下面的例子,當我們呼叫 `cache()`,我們指定下兩個查詢也要被快取:
+
+~~~
+[php]
+// ...
+$rows = Yii::app()->db->cache(1000, $dependency, 2)->createCommand($sql)->queryAll();
+// 查詢快取會被使用
+$rows = Yii::app()->db->createCommand($sql)->queryAll();
+~~~
+
+如你所知,當進行關聯式 AR 查詢,多個 SQL 查詢是有可能被執行的(藉由檢查 [log messages](/doc/guide/topics.logging))。例如,如果 `Post` 和 `Comment` 的關係是 `HAS_MANY`,那麼下列的程式碼會實際上執行了兩個查詢:
+
+- 首先選擇文章,限制數量 20;
+- 再來選擇前面所選文章的評論。
+
+~~~
+[php]
+$posts = Post::model()->with('comments')->findAll(array(
+ 'limit'=>20,
+));
+~~~
+
+如果我們使用查詢快取如下,那只有第一個查詢會被快取:
+
+~~~
+[php]
+$posts = Post::model()->cache(1000, $dependency)->with('comments')->findAll(array(
+ 'limit'=>20,
+));
+~~~
+
+為了快取這兩個查詢,我們需要提供額外的參數,說明有多少個資料庫查詢要快取:
+
+~~~
+[php]
+$posts = Post::model()->cache(1000, $dependency, 2)->with('comments')->findAll(array(
+ 'limit'=>20,
+));
+~~~
+
+
+### 限制
+
+快取查詢沒辦法運作在包含有資源句柄的結果。例如,當使用 `BLOB` 欄位類型,某些資料庫會回傳包含有資源句柄的欄位資料。
+
+某些快取裝置有大小限制。例如,memcache 限制每個項目最大的容量為 1MB。因此,如果查詢結果的大小超出這個限制,快取會失敗。
+
+
+<div class="revision">$Id$</div>
View
25 docs/guide/zh_tw/caching.dynamic.txt
@@ -0,0 +1,25 @@
+動態內容
+===============
+
+當使用 [片段快取](/doc/guide/caching.fragment) 或 [頁面快取](/doc/guide/caching.page),我們常常遇到的一個情況就是整個輸出一部分是靜態的,部分是動態的。例如,幫助頁可能會顯示靜態的幫助訊息,而使用者名稱顯示的是當前使用者的。
+
+解決這個問題,我們可以根據使用者名稱來匹配快取內容,但是這將是我們寶貴空間一個巨大的浪費,因為快取除了使用者名稱以外,其他大部分內容是相同的。我們還可以把網頁切成幾個片段並分別快取,但這種情況會使頁面和程式碼變得非常複雜。更好的方法是使用由 [CController] 提供的*動態內容*功能 。
+
+動態內容是指片段輸出即使是在片段快取包括的內容中也不會被快取。即使是包括的內容是從快取中取出,為了使動態內容在所有時間是動