bu/extra-param-converter-bundle

Sensio2 扩展包,它扩展了 Sensio ParamConverter 功能,允许转换简单的 GET 和复杂的 POST 数据

1.0.1 2014-10-17 18:21 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:24:29 UTC


README

BuExtraParamConverterBundle 扩展了 Sensio ParamConverter 功能,允许将简单的 GET 和复杂的 POST 数据转换为实体,解码 JSON 数据并从数据中移除标签。

需要 SensioFrameworkExtraBundle

Build Status

安装

使用 composer 添加包

composer require bu/extra-param-converter-bundle dev-master

在 AppKernel.php 中注册包

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Bu\ExtraParamConverterBundle\BuExtraParamConverterBundle(),
    );
}

Sensio ParamConverter 应该被启用,即在您的应用程序配置中参数 sensio_framework_extra.request.converters 应设置为 true(默认已设置)。

使用

获取转换器

您不需要编写任何注解,以下代码将适用于任何带有 user 参数的 GET 请求,例如 "/getUserDetails?user=123"

public function detailsAction(User $user)
{
    ...
}

其中 123 是用户 ID。如果找不到此 ID 的用户,它将抛出 NotFoundHttpException。

POST 转换器

use Bu\ExtraParamConverterBundle\Configuration\ExtraParamConverter;

    /**
     * @ExtraParamConverter("data", jsonData=true, stripTags=true, namespace="App", entities={"groups"="Group", "role"="Role"})
     */
    public function saveUserAction(array $data)
    {
        // $data['groups'] ...
    }

在这个例子中

  • 原始 POST 数据将被 JSON 解码(jsonData 默认为 false,用于标准表单提交)
  • 所有字符串值都将被过滤(stripTags 默认为 false)
  • 所有 "groups" 将转换为 "Group" 实体,数组 [id1, id2, id3] - 转换为 "App:Group" 实体的数组
  • 所有 "role" 将转换为 "Role" 实体,单个值转换为单个实体
  • 所有内容都将递归地处理到最深层
  • 结果将可在 $data 中使用(由注解中的第一个未命名的参数配置)
  • 在不正确的几种情况下会抛出异常
    • 无效的 JSON 数据,无效的 POST 数据
    • 实体未定义命名空间(如果您只想进行 jsonDecode/stripTags,可以同时省略它们)
    • 在数据中找不到为实体定义的键
    • 找不到任何实体

建议为您的包设置 doctrine 映射别名

# Doctrine Configuration
doctrine:
    orm:
        mappings:
            ApplicationMySuperBundle:
                alias: My

这将允许您使用简短的命名空间 "My" 而不是长的自动生成的 "ApplicationMySuperBundle"。

许可证

此包受 MIT 许可证的保护。