danrevah/sandbox-bundle

SandboxBundle

v1.0.0 2015-02-22 17:01 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:28:08 UTC


README

Build Status Scrutinizer Code Quality Latest Stable Version SensioLabsInsight

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 文件的响应。在 multiResponsetyperesponseCode 参数不是必需的,如果没有找到匹配的案例,将使用父参数。
  • responseFallback必需)- 当没有匹配任何 multiResponsecaseParams 时,使用此响应。