kunicmarko/form-annotation-bundle

该软件包已被 废弃 且不再维护。没有建议的替代软件包。

这是一个为 symfony 表单添加辅助注解的 Symfony Bundle。

v1.0.0 2018-01-22 21:54 UTC

This package is auto-updated.

Last update: 2020-11-16 04:33:30 UTC


README

Build Status Coverage Status

添加表单注解,帮助您在使用表单时避免样板代码。

文档

安装

1. 使用 composer 添加依赖

composer require kunicmarko/form-annotation-bundle

2. 在您的 Kernel 中注册该 Bundle

$bundles = array(
    // ...
    new KunicMarko\FormAnnotationBundle\FormAnnotationBundle(),
);

如何使用

首先,选择您想要使用的 注解 并将其添加到控制器操作中,您必须提供表单类和参数名称,参数也必须有类型。

虽然 FOSRestBundle 不是依赖项,但我的示例使用了 FOSRestBundle,这主要用于与之结合使用。

之前

public function createAction(Request $request, UserService $userService)
{
    $form = $this->createForm(CreateUserType::class, $user = new User());

    $form->submit($request->request->all());

    if ($form->isValid()) {
        $userService->createUser($user);

        return View::create($user, Response::HTTP_CREATED);
    }

    return View::create($form);
}

之后

use KunicMarko\FormAnnotationBundle\Annotation\Form;
use FOS\RestBundle\Controller\Annotations\View;
use Symfony\Component\HttpFoundation\Response;

 /**
 * @Form\Post(
 *     formType=CreateUserType::class,
 *     parameter="user"
 * )
 *
 * @View(statusCode=Response::HTTP_CREATED)
 */
public function createAction(User $user, UserService $userService)
{
    $userService->createUser($user);

    return $user;
}

请求仅在表单中的所有内容都有效时才进入控制器操作,否则将返回验证错误。

注解

在将注解添加到操作时,您可以设置 3 个选项

  • formType - 您的表单类型的完全限定名。
  • parameter - 您将在操作中使用的参数名称。(参数必须有类型)
  • clearMissing - 如果某些值未发送,则默认将其设置为空值,用于 POST/PUT,但对于 PATCH,将忽略此值。您可以根据自己的需要控制此操作。

POST

use KunicMarko\FormAnnotationBundle\Annotation\Form;
use FOS\RestBundle\Controller\Annotations\View;
use Symfony\Component\HttpFoundation\Response;

 /**
 * @Form\Post(
 *     formType=CreateUserType::class,
 *     parameter="user"
 * )
 *
 * @View(statusCode=Response::HTTP_CREATED)
 */
public function createAction(
    User $user,
    UserService $userService
) {
    $userService->createUser($user);

    return $user;
}

POST 中,我们根据您提供的类型获取参数,创建新的对象并从请求中填充数据,如果一切有效,我们将填充操作中的参数并允许请求进入操作,否则返回表单错误。

Patch/Put

use KunicMarko\FormAnnotationBundle\Annotation\Form;
use FOS\RestBundle\Controller\Annotations\View;
use Symfony\Component\HttpFoundation\Response;


 /**
 * @Form\Put(
 *     formType=UpdateUserType::class,
 *     parameter="user"
 * )
 *
 * @View(statusCode=Response::HTTP_OK)
 */
public function updateAction(
    User $user,
    UserService $userService
) {
    $userService->updateUser($user);

    return $user;
}

在这里,我们依赖于 Symfony ParamConverter,并期望您提供的参数已经是一个填充了的对象。如果您将 {id} 参数添加到路由中,并使用 Doctrine 实体进行类型提示,Symfony ParamConverter 将自动完成此操作。如果一切有效,我们允许请求进入操作,否则返回表单错误。