diff --git a/build/build b/build/build
index 07e8115dfa..31d54a2d89 100755
--- a/build/build
+++ b/build/build
@@ -8,10 +8,6 @@
* @license http://www.yiiframework.com/license/
*/
-// fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
define('YII_DEBUG', true);
$composerAutoload = [
diff --git a/docs/guide-es/structure-controllers.md b/docs/guide-es/structure-controllers.md
index b9d1aed746..d8c2f8f471 100644
--- a/docs/guide-es/structure-controllers.md
+++ b/docs/guide-es/structure-controllers.md
@@ -112,7 +112,7 @@ Por esta razón, los IDs de controladores son a menudo sustantivos de los tipos
Por ejemplo, podrías utilizar `article` como el ID de un controlador que maneja datos de artículos.
Por defecto, los IDs de controladores deberían contener sólo estos caracteres: letras del Inglés en minúscula, dígitos,
-guiones bajos y medios, y barras. Por ejemplo, `article`, `post-comment`, `admin/post2-comment` son todos
+guiones bajos y medios, y barras. Por ejemplo, `article`, `post-comment`, `admin/post-comment` son todos
IDs de controladores válidos, mientras que `article?`, `PostComment`, `admin\post` no lo son.
Los guiones en un ID de controlador son utilizados para separar palabras, mientras que las barras diagonales lo son para
@@ -134,14 +134,14 @@ toma el valor por defecto: `app\controllers`:
* `article` deriva en `app\controllers\ArticleController`;
* `post-comment` deriva en `app\controllers\PostCommentController`;
-* `admin/post2-comment` deriva en `app\controllers\admin\Post2CommentController`.
+* `admin/post-comment` deriva en `app\controllers\admin\PostCommentController`.
Las clases de controladores deben ser [autocargables](concept-autoloading.md). Por esta razón, en los ejemplos anteriores,
la clase del controlador `article` debe ser guardada en un archivo cuyo alias [alias](concept-aliases.md)
-es `@app/controllers/ArticleController.php`; mientras que el controlador `admin/post2-comment` debería estar
-en `@app/controllers/admin/Post2CommentController.php`.
+es `@app/controllers/ArticleController.php`; mientras que el controlador `admin/post-comment` debería estar
+en `@app/controllers/admin/PostCommentController.php`.
-> Información: En el último ejemplo, `admin/post2-comment`, demuestra cómo puedes poner un controlador bajo un sub-directorio
+> Información: En el último ejemplo, `admin/post-comment`, demuestra cómo puedes poner un controlador bajo un sub-directorio
del [[yii\base\Application::controllerNamespace|controller namespace]]. Esto es útil cuando quieres organizar
tus controladores en varias categorías pero sin utilizar [módulos](structure-modules.md).
diff --git a/docs/guide-es/structure-entry-scripts.md b/docs/guide-es/structure-entry-scripts.md
index e5396d41be..6fc7b1de42 100644
--- a/docs/guide-es/structure-entry-scripts.md
+++ b/docs/guide-es/structure-entry-scripts.md
@@ -63,10 +63,6 @@ De la misma manera, el siguiente código es el script de entrada para la [aplica
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// el fcgi no tiene STDIN y STDOUT definidos por defecto
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
// registrar el cargador automático de Composer
require(__DIR__ . '/vendor/autoload.php');
diff --git a/docs/guide-fr/structure-entry-scripts.md b/docs/guide-fr/structure-entry-scripts.md
index e4bbdb36f9..03972e9de4 100644
--- a/docs/guide-fr/structure-entry-scripts.md
+++ b/docs/guide-fr/structure-entry-scripts.md
@@ -64,10 +64,6 @@ De même, le code qui suit est le code du script de démarrage d'une application
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
// register Composer autoloader
require(__DIR__ . '/vendor/autoload.php');
diff --git a/docs/guide-ja/structure-controllers.md b/docs/guide-ja/structure-controllers.md
index 1d19a41026..e9b7e55da5 100644
--- a/docs/guide-ja/structure-controllers.md
+++ b/docs/guide-ja/structure-controllers.md
@@ -136,9 +136,9 @@ class SiteController extends Controller
コントローラクラスは [オートロード可能](concept-autoloading.md) でなければなりません。
この理由により、上記の例の `aritcle` コントローラクラスは [エイリアス](concept-aliases.md) が `@app/controllers/ArticleController.php` であるファイルに保存されるべきものとなります。
-一方、`admin/post2-comment` コントローラは `@app/controllers/admin/Post2CommentController.php` というエイリアスのファイルに保存されるべきものとなります。
+一方、`admin/post-comment` コントローラは `@app/controllers/admin/PostCommentController.php` というエイリアスのファイルに保存されるべきものとなります。
-> Info|情報: 最後の例である `admin/post2-comment` は、どうすれば [[yii\base\Application::controllerNamespace|コントローラ名前空間]] のサブディレクトリにコントローラを置くことが出来るかを示しています。
+> Info|情報: 最後の例である `admin/post-comment` は、どうすれば [[yii\base\Application::controllerNamespace|コントローラ名前空間]] のサブディレクトリにコントローラを置くことが出来るかを示しています。
この方法は、コントローラをいくつかのカテゴリに分けて編成したい、けれども [モジュール](structure-modules.md) は使いたくない、という場合に役立ちます。
diff --git a/docs/guide-ja/structure-entry-scripts.md b/docs/guide-ja/structure-entry-scripts.md
index d07b9941e2..08c599d451 100644
--- a/docs/guide-ja/structure-entry-scripts.md
+++ b/docs/guide-ja/structure-entry-scripts.md
@@ -62,10 +62,6 @@ $config = require(__DIR__ . '/../config/web.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// デフォルトでは fcgi が STDIN と STDOUT を定義していないので
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
// Composer のオートローダを登録
require(__DIR__ . '/vendor/autoload.php');
diff --git a/docs/guide-ja/tutorial-console.md b/docs/guide-ja/tutorial-console.md
index 3810521d6d..d9f78a871f 100644
--- a/docs/guide-ja/tutorial-console.md
+++ b/docs/guide-ja/tutorial-console.md
@@ -67,10 +67,6 @@ yii migrate/up 5 --migrationTable=migrations
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi では、デフォルトでは、STDIN と STDOUT が定義されていない
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
diff --git a/docs/guide-pt-BR/structure-controllers.md b/docs/guide-pt-BR/structure-controllers.md
index 36fbaff198..4a231f96da 100644
--- a/docs/guide-pt-BR/structure-controllers.md
+++ b/docs/guide-pt-BR/structure-controllers.md
@@ -154,9 +154,9 @@ tenha por padrão o valor `app\controllers`:
As classes dos controllers devem ser [autoloadable](concept-autoloading.md).
Por esta razão, nos exemplos anteriores, o controller `article` deve ser salvo
no arquivo cuja [alias](concept-aliases.md) é `@app/controllers/ArticleController.php`;
-enquanto o controller `admin/post2-comment` deve ser salvo no `@app/controllers/admin/Post2CommentController.php`.
+enquanto o controller `admin/post-comment` deve ser salvo no `@app/controllers/admin/PostCommentController.php`.
-> Informação: No último exemplo `admin/post2-comment`, mostra como você pode colocar
+> Informação: No último exemplo `admin/post-comment`, mostra como você pode colocar
um controller em um subdiretório do [[yii\base\Application::controllerNamespace|namespace controller]]. Isto é útil quando você quiser organizar seus controllers em diversas
categorias e não quiser usar [módulos](structure-modules.md).
diff --git a/docs/guide-pt-BR/structure-entry-scripts.md b/docs/guide-pt-BR/structure-entry-scripts.md
index 2984cfc741..0c295dc23d 100644
--- a/docs/guide-pt-BR/structure-entry-scripts.md
+++ b/docs/guide-pt-BR/structure-entry-scripts.md
@@ -69,10 +69,6 @@ do console:
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// o fcgi não tem STDIN e STDOUT definidos por padrão
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
// registra o autoloader do Composer
require(__DIR__ . '/vendor/autoload.php');
diff --git a/docs/guide-ru/structure-controllers.md b/docs/guide-ru/structure-controllers.md
index 9638dfab1d..dfab9b985a 100644
--- a/docs/guide-ru/structure-controllers.md
+++ b/docs/guide-ru/structure-controllers.md
@@ -139,9 +139,9 @@ ID контроллеров также могут содержать префи
Классы контроллеров должны быть [автозагружаемыми](concept-autoloading.md). Именно по этой причине, в вышеприведенном примере,
контроллер `article` должен быть сохранен в файл, [псевдоним](concept-aliases.md) которого `@app/controllers/ArticleController.php`;
-в то время как контроллер `admin/post2-comment` должен находиться в файле `@app/controllers/admin/Post2CommentController.php`.
+в то время как контроллер `admin/post-comment` должен находиться в файле `@app/controllers/admin/PostCommentController.php`.
-> Информация: Последний пример `admin/post2-comment` показывает каким образом вы можете расположить контроллер в подпапке
+> Информация: Последний пример `admin/post-comment` показывает каким образом вы можете расположить контроллер в подпапке
[[yii\base\Application::controllerNamespace|пространства имен контроллеров]]. Это очень удобно, когда вы хотите организовать свои контроллеры
в несколько категорий и не хотите использовать [модули](structure-modules.md).
diff --git a/docs/guide-ru/structure-entry-scripts.md b/docs/guide-ru/structure-entry-scripts.md
index d5630e4fe0..69cfe45233 100644
--- a/docs/guide-ru/structure-entry-scripts.md
+++ b/docs/guide-ru/structure-entry-scripts.md
@@ -64,10 +64,6 @@ $config = require(__DIR__ . '/../config/web.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi не имеет констант STDIN и STDOUT, они определяются по умолчанию
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
// регистрация загрузчика классов Composer
require(__DIR__ . '/vendor/autoload.php');
diff --git a/docs/guide-ru/tutorial-console.md b/docs/guide-ru/tutorial-console.md
index 627c7e5977..5bc0450f49 100644
--- a/docs/guide-ru/tutorial-console.md
+++ b/docs/guide-ru/tutorial-console.md
@@ -69,10 +69,6 @@ yii migrate/up 5 --migrationTable=migrations
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
diff --git a/docs/guide-uk/structure-controllers.md b/docs/guide-uk/structure-controllers.md
index d117b953c0..da21808065 100644
--- a/docs/guide-uk/structure-controllers.md
+++ b/docs/guide-uk/structure-controllers.md
@@ -141,10 +141,10 @@ class SiteController extends Controller
Класи контролерів мають бути [автоматично завантаженими](concept-autoloading.md). Саме з цієї причини у вищенаведених прикладах
контролер `article` має бути збереженим у файл, [псевдонім шляху](concept-aliases.md) якого є
-`@app/controllers/ArticleController.php`; в той час, як контролер `admin/post2-comment` має знаходитись у файлі
-`@app/controllers/admin/Post2CommentController.php`.
+`@app/controllers/ArticleController.php`; в той час, як контролер `admin/post-comment` має знаходитись у файлі
+`@app/controllers/admin/PostCommentController.php`.
-> Інформація: Останній приклад `admin/post2-comment` показує яким чином ви можете розташувати контролер в під-директорії
+> Інформація: Останній приклад `admin/post-comment` показує яким чином ви можете розташувати контролер в під-директорії
[[yii\base\Application::controllerNamespace|простору імен контролера]]. Це дуже зручно, коли ви хочете організувати
свої контролери у декілька категорій і не хочете використовувати [модулі](structure-modules.md).
diff --git a/docs/guide-uk/structure-entry-scripts.md b/docs/guide-uk/structure-entry-scripts.md
index cc21f9585d..aa750cc55b 100644
--- a/docs/guide-uk/structure-entry-scripts.md
+++ b/docs/guide-uk/structure-entry-scripts.md
@@ -64,10 +64,6 @@ $config = require(__DIR__ . '/../config/web.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi не має констант STDIN та STDOUT за замовчуванням
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
// реєстрація автозавантажувача класів Composer
require(__DIR__ . '/vendor/autoload.php');
diff --git a/docs/guide-uk/tutorial-console.md b/docs/guide-uk/tutorial-console.md
index b4bbbfcc80..2d98ebc370 100644
--- a/docs/guide-uk/tutorial-console.md
+++ b/docs/guide-uk/tutorial-console.md
@@ -69,10 +69,6 @@ yii migrate/up 5 --migrationTable=migrations
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
diff --git a/docs/guide-uz/structure-controllers.md b/docs/guide-uz/structure-controllers.md
index 182a708597..3a10ba3776 100644
--- a/docs/guide-uz/structure-controllers.md
+++ b/docs/guide-uz/structure-controllers.md
@@ -135,9 +135,9 @@ ID контроллеров также могут содержать префи
Классы контроллеров должны быть [автозагружаемыми](concept-autoloading.md). Именно по этой причине, в вышеприведенном примере,
контроллер `article` должен быть сохранен в файл, [псевдоним](concept-aliases.md) которого `@app/controllers/ArticleController.php`;
-в то время как контроллер `admin/post2-comment` должен находиться в файле `@app/controllers/admin/Post2CommentController.php`.
+в то время как контроллер `admin/post-comment` должен находиться в файле `@app/controllers/admin/PostCommentController.php`.
-> Информация: Последний пример `admin/post2-comment` показывает каким образом вы можете расположить контроллер в подпапке
+> Информация: Последний пример `admin/post-comment` показывает каким образом вы можете расположить контроллер в подпапке
[[yii\base\Application::controllerNamespace|пространства имен контроллеров]]. Это очень удобно, когда вы хотите организовать свои контроллеры
в несколько категорий и не хотите использовать [модули](structure-modules.md).
diff --git a/docs/guide-zh-CN/rest-authentication.md b/docs/guide-zh-CN/rest-authentication.md
index d2a9aaa9ce..9c8b201bbc 100644
--- a/docs/guide-zh-CN/rest-authentication.md
+++ b/docs/guide-zh-CN/rest-authentication.md
@@ -107,7 +107,7 @@ class User extends ActiveRecord implements IdentityInterface
如果认证失败,会发送一个HTTP状态码为401的响应,并带有其他相关信息头(如HTTP 基本认证会有`WWW-Authenticate` 头信息).
-## 授权
+## 授权
在用户认证成功后,你可能想要检查他是否有权限执行对应的操作来获取资源,这个过程称为 *authorization* ,
详情请参考 [Authorization section](security-authorization.md).
diff --git a/docs/guide-zh-CN/rest-controllers.md b/docs/guide-zh-CN/rest-controllers.md
index cb50f047e8..6b423c9732 100644
--- a/docs/guide-zh-CN/rest-controllers.md
+++ b/docs/guide-zh-CN/rest-controllers.md
@@ -21,7 +21,7 @@ Yii 提供两个控制器基类来简化创建RESTful 操作的工作:[[yii\rest
* 对操作和资源进行用户认证.
-## 创建控制器类
+## 创建控制器类
当创建一个新的控制器类,控制器类的命名最好使用资源名称的单数格式,例如,提供用户信息的控制器
可命名为`UserController`.
@@ -38,7 +38,7 @@ public function actionView($id)
```
-## 过滤器
+## 过滤器
[[yii\rest\Controller]]提供的大多数RESTful API功能通过[过滤器](structure-filters.md)实现.
特别是以下过滤器会按顺序执行:
@@ -67,13 +67,13 @@ public function behaviors()
```
-## 继承 `ActiveController`
+## 继承 `ActiveController`
如果你的控制器继承[[yii\rest\ActiveController]],应设置[[yii\rest\ActiveController::modelClass||modelClass]] 属性
为通过该控制器返回给用户的资源类名,该类必须继承[[yii\db\ActiveRecord]].
-### 自定义操作
+### 自定义操作
[[yii\rest\ActiveController]] 默认提供一下操作:
@@ -110,7 +110,7 @@ public function prepareDataProvider()
请参考独立操作类的参考文档学习哪些配置项有用。
-### 执行访问检查
+### 执行访问检查
通过RESTful APIs显示数据时,经常需要检查当前用户是否有权限访问和操作所请求的资源,
在[[yii\rest\ActiveController]]中,可覆盖[[yii\rest\ActiveController::checkAccess()|checkAccess()]]方法来完成权限检查。
diff --git a/docs/guide-zh-CN/rest-error-handling.md b/docs/guide-zh-CN/rest-error-handling.md
index 11f2b4c820..53798389a7 100644
--- a/docs/guide-zh-CN/rest-error-handling.md
+++ b/docs/guide-zh-CN/rest-error-handling.md
@@ -41,3 +41,54 @@ Content-Type: application/json; charset=UTF-8
* `422`: 数据验证失败 (例如,响应一个 `POST` 请求)。 请检查响应体内详细的错误消息。
* `429`: 请求过多。 由于限速请求被拒绝。
* `500`: 内部服务器错误。 这可能是由于内部程序错误引起的。
+
+
+## 自定义错误响应
+
+有时你可能想自定义默认的错误响应格式。例如,你想一直使用HTTP状态码200,
+而不是依赖于使用不同的HTTP状态来表示不同的错误,
+并附上实际的HTTP状态代码为JSON结构的一部分的响应,就像以下所示,
+
+```
+HTTP/1.1 200 OK
+Date: Sun, 02 Mar 2014 05:31:43 GMT
+Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
+Transfer-Encoding: chunked
+Content-Type: application/json; charset=UTF-8
+
+{
+ "success": false,
+ "data": {
+ "name": "Not Found Exception",
+ "message": "The requested resource was not found.",
+ "code": 0,
+ "status": 404
+ }
+}
+```
+
+为了实现这一目的,你可以响应该应用程序配置的 `response` 组件的 `beforeSend` 事件:
+
+```php
+return [
+ // ...
+ 'components' => [
+ 'response' => [
+ 'class' => 'yii\web\Response',
+ 'on beforeSend' => function ($event) {
+ $response = $event->sender;
+ if ($response->data !== null && !empty(Yii::$app->request->get('suppress_response_code'))) {
+ $response->data = [
+ 'success' => $response->isSuccessful,
+ 'data' => $response->data,
+ ];
+ $response->statusCode = 200;
+ }
+ },
+ ],
+ ],
+];
+```
+
+当 `suppress_response_code` 作为 `GET` 参数传递时,上面的代码
+将重新按照自己定义的格式响应(无论失败还是成功)。
diff --git a/docs/guide-zh-CN/rest-quick-start.md b/docs/guide-zh-CN/rest-quick-start.md
index 1f8ed5fa9a..4d37d89e7d 100644
--- a/docs/guide-zh-CN/rest-quick-start.md
+++ b/docs/guide-zh-CN/rest-quick-start.md
@@ -60,6 +60,23 @@ class UserController extends ActiveController
用户的数据就能通过美化的 URL 和有意义的 http 动词进行访问和操作。
+## 启用 JSON 输入
+
+为了使 API 接收 JSON 格式的输入数据,配置 `request` 应用程序组件的 [[yii\web\Request::$parsers|parsers]]
+属性使用 [[yii\web\JsonParser]] 用于JSON输入:
+
+```php
+'request' => [
+ 'parsers' => [
+ 'application/json' => 'yii\web\JsonParser',
+ ]
+]
+```
+
+> 补充:上述配置是可选的。若未按上述配置,API 将仅可以分辨
+ `application/x-www-form-urlencoded` 和 `multipart/form-data` 输入格式。
+
+
## 尝试
随着以上所做的最小的努力,你已经完成了创建用于访问用户数据
@@ -76,16 +93,15 @@ class UserController extends ActiveController
* `OPTIONS /users/123`: 显示有关末端 `/users/123` 支持的动词
> 补充:Yii 将在末端使用的控制器的名称自动变为复数。(译注:个人感觉这里应该变为注意)
+> 你可以用 [[yii\rest\UrlRule::$pluralize]]-属性来配置此项。
-你可以访问你的API用`curl`命令如下,
+你可以访问你的API用 `curl` 命令如下,
```
$ curl -i -H "Accept:application/json" "http://localhost/users"
HTTP/1.1 200 OK
-Date: Sun, 02 Mar 2014 05:31:43 GMT
-Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
-X-Powered-By: PHP/5.4.20
+...
X-Pagination-Total-Count: 1000
X-Pagination-Page-Count: 50
X-Pagination-Current-Page: 1
@@ -109,15 +125,14 @@ Content-Type: application/json; charset=UTF-8
]
```
-试着改变可接受的内容类型为`application/xml`,你会看到结果以 XML 格式返回:
+试着改变可接受的内容类型为`application/xml`,
+你会看到结果以 XML 格式返回:
```
$ curl -i -H "Accept:application/xml" "http://localhost/users"
HTTP/1.1 200 OK
-Date: Sun, 02 Mar 2014 05:31:43 GMT
-Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
-X-Powered-By: PHP/5.4.20
+...
X-Pagination-Total-Count: 1000
X-Pagination-Page-Count: 50
X-Pagination-Current-Page: 1
@@ -142,6 +157,20 @@ Content-Type: application/xml
```
+以下命令将创建一个新的用户通过发送JSON格式的用户数据的 POST 请求:
+
+```
+$ curl -i -H "Accept:application/json" -H "Content-Type:application/json" -XPOST "http://localhost/users" -d '{"username": "example", "email": "user@example.com"}'
+
+HTTP/1.1 201 Created
+...
+Location: http://localhost/users/1
+Content-Length: 99
+Content-Type: application/json; charset=UTF-8
+
+{"id":1,"username":"example","email":"user@example.com","created_at":1414674789,"updated_at":1414674789}
+```
+
> 技巧:你还可以通过 Web 浏览器中输入 URL `http://localhost/users` 来访问你的 API。
尽管如此,你可能需要一些浏览器插件来发送特定的 headers 请求。
@@ -169,5 +198,6 @@ Content-Type: application/xml
你可以使用 [[yii\rest\UrlRule]] 简化路由到你的 API 末端。
-为了方便维护你的WEB前端和后端,建议你开发接口作为一个单独的应用程序,虽然这不是必须的。
+为了方便维护你的WEB前端和后端,建议你开发接口作为一个单独的应用程序,
+虽然这不是必须的。
diff --git a/docs/guide-zh-CN/rest-resources.md b/docs/guide-zh-CN/rest-resources.md
index d5a7cd88ba..c2ce873b07 100644
--- a/docs/guide-zh-CN/rest-resources.md
+++ b/docs/guide-zh-CN/rest-resources.md
@@ -15,7 +15,7 @@ RESTful 的 API 都是关于访问和操作 *资源*,可将资源看成MVC模
继承 [[yii\base\Model]] 会将它所有的公开成员变量返回。
-## 字段
+## 字段
当RESTful API响应中包含一个资源时,该资源需要序列化成一个字符串。
Yii将这个过程分成两步,首先,资源会被[[yii\rest\Serializer]]转换成数组,
@@ -42,7 +42,7 @@ http://localhost/users?fields=id,email&expand=profile
```
-### 覆盖 `fields()` 方法
+### 覆盖 `fields()` 方法
[[yii\base\Model::fields()]] 默认返回模型的所有属性作为字段,
[[yii\db\ActiveRecord::fields()]] 只返回和数据表关联的属性作为字段。
@@ -83,7 +83,7 @@ public function fields()
> 应覆盖`fields()`过滤掉,在上述例子中,我们选择过滤掉 `auth_key`, `password_hash` 和 `password_reset_token`.
-### 覆盖 `extraFields()` 方法
+### 覆盖 `extraFields()` 方法
[[yii\base\Model::extraFields()]] 默认返回空值,[[yii\db\ActiveRecord::extraFields()]] 返回和数据表关联的属性。
@@ -119,7 +119,7 @@ public function extraFields()
```
-## 链接
+## 链接
[HATEOAS](http://en.wikipedia.org/wiki/HATEOAS), 是Hypermedia as the Engine of Application State的缩写,
提升RESTful API 应返回允许终端用户访问的资源操作的信息,HATEOAS 的目的是在API中返回包含相关链接信息的资源数据。
@@ -160,7 +160,7 @@ class User extends ActiveRecord implements Linkable
```
-## 集合
+## 集合
资源对象可以组成 *集合*,每个集合包含一组相同类型的资源对象。
diff --git a/docs/guide-zh-CN/structure-controllers.md b/docs/guide-zh-CN/structure-controllers.md
index 41489c82e1..66d02180dc 100644
--- a/docs/guide-zh-CN/structure-controllers.md
+++ b/docs/guide-zh-CN/structure-controllers.md
@@ -129,9 +129,9 @@ class SiteController extends Controller
控制器类必须能被 [自动加载](concept-autoloading.md),所以在上面的例子中,
控制器`article` 类应在 [别名](concept-aliases.md) 为`@app/controllers/ArticleController.php`的文件中定义,
-控制器`admin/post2-comment`应在`@app/controllers/admin/Post2CommentController.php`文件中。
+控制器`admin/post-comment`应在`@app/controllers/admin/PostCommentController.php`文件中。
-> 补充: 最后一个示例 `admin/post2-comment` 表示你可以将控制器放在
+> 补充: 最后一个示例 `admin/post-comment` 表示你可以将控制器放在
[[yii\base\Application::controllerNamespace|controller namespace]]控制器命名空间下的子目录中,
在你不想用 [模块](structure-modules.md) 的情况下给控制器分类,这种方式很有用。
diff --git a/docs/guide-zh-CN/structure-entry-scripts.md b/docs/guide-zh-CN/structure-entry-scripts.md
index ac18b64816..253845314c 100644
--- a/docs/guide-zh-CN/structure-entry-scripts.md
+++ b/docs/guide-zh-CN/structure-entry-scripts.md
@@ -58,10 +58,6 @@ $config = require(__DIR__ . '/../config/web.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi 默认没有定义 STDIN 和 STDOUT
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
// 注册 Composer 自动加载器
require(__DIR__ . '/vendor/autoload.php');
diff --git a/docs/guide/structure-entry-scripts.md b/docs/guide/structure-entry-scripts.md
index 7f9e947bfa..1349c2ef52 100644
--- a/docs/guide/structure-entry-scripts.md
+++ b/docs/guide/structure-entry-scripts.md
@@ -64,10 +64,6 @@ Similarly, the following is the code for the entry script of a console applicati
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
// register Composer autoloader
require(__DIR__ . '/vendor/autoload.php');
diff --git a/docs/guide/tutorial-console.md b/docs/guide/tutorial-console.md
index 9bd8f1a92c..ed796244be 100644
--- a/docs/guide/tutorial-console.md
+++ b/docs/guide/tutorial-console.md
@@ -69,10 +69,6 @@ It contains code like the following:
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
diff --git a/framework/BaseYii.php b/framework/BaseYii.php
index 2d45d4bf64..77c9861df1 100644
--- a/framework/BaseYii.php
+++ b/framework/BaseYii.php
@@ -93,7 +93,7 @@ class BaseYii
*/
public static function getVersion()
{
- return '2.0.5-dev';
+ return '2.0.6-dev';
}
/**
diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md
index 19c9a6bd14..0fad24230f 100644
--- a/framework/CHANGELOG.md
+++ b/framework/CHANGELOG.md
@@ -1,7 +1,7 @@
Yii Framework 2 Change Log
==========================
-2.0.5 under development
+2.0.6 under development
-----------------------
- Bug #7305: Logging of Exception objects resulted in failure of the logger i.e. no logs being written (cebe)
@@ -24,12 +24,12 @@ Yii Framework 2 Change Log
- Bug #8772: ActiveQuery failed removing duplicate records after join when the resultset did not contain the pk values e.g. after grouping (cebe)
- Bug #8900: Fixed determine active menu item with url-alias in route `\yii\widgets\Menu::isItemActive()` (demi)
- Bug #9046: Fixed problem with endless error loop when an error occurred after sending a stream or file download response to the user (cebe)
-- Bug #9070: Fixed `ViewAction::resolveViewName()` not to accept `/../` and `/./` (thejahweh, samdark)
- Bug: Fixed string comparison in `BaseActiveRecord::unlink()` which may result in wrong comparison result for hash valued primary keys starting with `0e` (cebe)
- Bug: Pass correct action name to `yii\console\Controller::options()` when default action was requested (cebe)
- Bug: Automatic garbage collection in `yii\caching\FileCache` was not triggered (kidol)
- Enh #3335: Implemented `SchemaBuilder` (pana1990, vaseninm, samdark)
- Enh #6043: Specification for 'class' and 'style' in array format added to `yii\helpers\Html` (klimov-paul)
+- Enh #6853: Console application will now register PHP constants for `STDIN`, `STDOUT`, and `STDERR` itself if they are not defined (cebe)
- Enh #7169: `yii\widgets\ActiveField` now uses corresponding methods for default parts rendering (klimov-paul)
- Enh #8070: `yii\console\controllers\MessageController` now sorts created messages, even if there is no new one, while saving to PHP file (klimov-paul)
- Enh #8286: `yii\console\controllers\MessageController` improved allowing extraction of nested translator calls (klimov-paul)
@@ -46,6 +46,13 @@ Yii Framework 2 Change Log
- Chg #6354: `ErrorHandler::logException()` will now log the whole exception object instead of only its string representation (cebe)
- Chg #8556: Extracted `yii\web\User::getAuthManager()` method (samdark)
+
+2.0.5 July 11, 2015
+-------------------
+
+- Bug #9070 (CVE-2015-5467): Fixed `ViewAction::resolveViewName()` not to accept `/../` and `/./` (thejahweh, samdark)
+
+
2.0.4 May 10, 2015
------------------
diff --git a/framework/UPGRADE.md b/framework/UPGRADE.md
index 368c042db5..34d56ccf92 100644
--- a/framework/UPGRADE.md
+++ b/framework/UPGRADE.md
@@ -5,11 +5,11 @@ Upgrading Instructions for Yii Framework v2
The following upgrading instructions are cumulative. That is,
if you want to upgrade from version A to version C and there is
-version B between A and C, you need to following the instructions
+version B between A and C, you need to follow the instructions
for both A and B.
-Upgrade from Yii 2.0.4
+Upgrade from Yii 2.0.5
----------------------
* The signature of the following methods in `yii\console\controllers\MessageController` has changed. They have an extra parameter `$markUnused`.
@@ -18,6 +18,11 @@ Upgrade from Yii 2.0.4
- `saveMessagesCategoryToPHP($messages, $fileName, $overwrite, $removeUnused, $sort, $category, $markUnused)`
- `saveMessagesToPO($messages, $dirName, $overwrite, $removeUnused, $sort, $catalog, $markUnused)`
+Upgrade from Yii 2.0.4
+----------------------
+
+Upgrading from 2.0.4 to 2.0.5 does not require any changes.
+
Upgrade from Yii 2.0.3
----------------------
diff --git a/framework/caching/FileCache.php b/framework/caching/FileCache.php
index a96242c1a9..a26d97bed2 100644
--- a/framework/caching/FileCache.php
+++ b/framework/caching/FileCache.php
@@ -112,7 +112,7 @@ class FileCache extends Cache
$fp = @fopen($cacheFile, 'r');
if ($fp !== false) {
@flock($fp, LOCK_SH);
- $cacheValue = @file_get_contents($cacheFile);
+ $cacheValue = @stream_get_contents($fp);
@flock($fp, LOCK_UN);
@fclose($fp);
return $cacheValue;
diff --git a/framework/console/Application.php b/framework/console/Application.php
index 19b41665ab..0668da84ad 100644
--- a/framework/console/Application.php
+++ b/framework/console/Application.php
@@ -10,6 +10,12 @@ namespace yii\console;
use Yii;
use yii\base\InvalidRouteException;
+// define STDIN, STDOUT and STDERR if the PHP SAPI did not define them (e.g. creating console application in web env)
+// http://php.net/manual/en/features.commandline.io-streams.php
+defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDERR') or define('STDERR', fopen('php://stderr', 'w'));
+
/**
* Application represents a console application.
*
diff --git a/framework/yii b/framework/yii
index 288c3534d3..78c8fa02fb 100755
--- a/framework/yii
+++ b/framework/yii
@@ -10,10 +10,6 @@
defined('YII_DEBUG') or define('YII_DEBUG', true);
-// fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
-
$composerAutoload = [
__DIR__ . '/../vendor/autoload.php', // in yii2-dev repo
__DIR__ . '/../../autoload.php', // installed as a composer binary