danrevah / sandbox-bundle
SandboxBundle
v1.0.0
2015-02-22 17:01 UTC
Requires
- php: >=5.5.0
- danrevah/shortifypunit: 1.0.*
- doctrine/common: dev-master
- symfony/expression-language: 2.6.4@dev
- symfony/framework-bundle: ~2.3
This package is not auto-updated.
Last update: 2024-09-28 17:28:08 UTC
README
SandboxBundle 是一个用于 Symfony2 的 Bundle,主要用于你不想在沙盒/测试环境中访问真实控制器的情况下。
例如,如果你有一个处理某些操作的控制器,比如一个购买操作,你可以使用一个伪造的响应而不是创建真实的购买请求。只需使用注解并在你的沙盒/测试环境中,控制器就会被你选择的响应覆盖(JSON 或 XML 格式)。
目录
安装
以下说明使用 Composer 进行安装。如果你没有 Composer,你可以从 https://composer.php.ac.cn/ 下载。
- 根据你的环境运行以下命令之一:
$ composer require "danrevah/sandbox-bundle":"dev-master"
$ php composer.phar require "danrevah/sandbox-bundle":"dev-master"
创建沙盒环境
- 将你的
project-root-directory/web/app_dev.php目录下的文件复制到相同的目录,并将新文件命名为app_sandbox.php。 - 在你刚刚创建的
app_sandbox.php文件中,将此行$kernel = new AppKernel('dev', true);改为此行$kernel = new AppKernel('sandbox', true); - 转到
project-root-directory/app/AppKernel.php并将此行if (in_array($this->getEnvironment(), array('dev', 'test')))改为此行 `if (in_array($this->getEnvironment(), array('dev', 'test','sandbox'))) ``` - 在 AppKernel.php 文件中,在你刚才编辑的
if case之后也添加此if case。
if (in_array($this->getEnvironment(), array('sandbox'))) { $bundles[] = new danrevah\SandboxBundle\SandboxBundle(); }
- 将
project-root-directory/app/config/config_dev.yml文件复制并命名为config_sandbox.yml。 - 将以下内容添加到你的
config_sandbox.yml文件的末尾
sandbox: response: force: true # Force mode means you won't be able to "fall" # to the REAL controller if a Sandbox response is not available. # It will produce an error instead.
- 这就完成了!现在你可以使用
app_sandbox.php访问你的沙盒环境。
单个响应注解
在沙盒环境中需要恒定响应的情况下使用。响应总是相同的。
/** * GET /resource * * @ApiSandboxResponse( * responseCode=200, * type="json", * parameters={ * {"name"="some_parameter", "required"=true} * }, * resource="@SandboxBundle/Resources/responses/token.json" * ) */ public function getAction() { return array('foo'); }
responseCode(默认 = 200)- 这是沙盒响应的 HTTP 响应代码。type(默认 = 'json')- 你可以选择 'json' 或 'xml'。parameters(默认 = array())- 这用于验证沙盒 API 中所需的参数,以便在参数缺失时产生异常。resource(必需)- 真实控制器将被此内容覆盖,在上面的例子中,它将始终返回token.json的内容,而不是真实 getAction() 的 'foo',它甚至不会进入。
多个响应注解
在需要根据发送的参数返回不同响应的情况下使用。
/** * POST /resource * * @ApiSandboxMultiResponse( * responseCode=200, * type="json", * parameters={ * {"name"="some_parameter", "required"=true} * }, * responseFallback={ * "type"="xml", * "responseCode"=500, * "resource"="@SandboxBundle/Resources/responses/error.xml" * }, * multiResponse={ * { * "type"="xml", * "resource"="@SandboxBundle/Resources/responses/token.xml", * "caseParams": {"some_parameter"="1", "some_parameter2"="2"} * }, * { * "resource"="@SandboxBundle/Resources/responses/token.json", * "caseParams": {"some_parameter"="3", "some_parameter2"="4"} * } * } * ) */ public function postAction() { return array('bar'); }
responseCode(默认 = 200)- 这是沙盒响应的 HTTP 响应代码。type(默认 = 'json')- 你可以选择 'json' 或 'xml'。parameters(默认 = array())- 这用于验证沙盒 API 中所需的参数,以便在参数缺失时产生异常。multiResponse(必需)- 用于从请求中查找匹配的parameters,如果值相等,则返回包含指定resource文件的响应。在multiResponse中type和responseCode参数不是必需的,如果没有找到匹配的案例,将使用父参数。responseFallback(必需)- 当没有匹配任何multiResponse的caseParams时,使用此响应。