私は自動生成されたID、文字列と整数の3つのフィールドを持つ単純なエンティティを持っています。私は後者の2つの制約を設定しており、整数フィールドに対応する制約は完全に機能します。範囲にない整数を送信した場合、または整数以外のものを送信する必要がある場合は、エラーが返されます。文字列のsymfonyフォームタイプ制約が整数値
しかし、これは文字列フィールドでは発生しません。整数を送信すると、フォームは正しく検証されます。なぜそれが起こっているのですか?
私はテストのために使用していたコードは次のとおりです。
curl -H "Content-Type: application/json" -X POST -d '{"fieldOne": 9000, "fieldTwo": 5}' http://localhost:8000/foos
FooController.php
<?php
namespace AppBundle\Controller;
use AppBundle\Entity\FooBar;
use AppBundle\Form\FooBarType;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Request\ParamFetcher;
use FOS\RestBundle\View\View;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class FooController extends FOSRestController
{
public function getFooAction()
{
$view = new View();
$data = array(
'foo' => 'bar'
);
$view->setStatusCode(Response::HTTP_OK);
$view->setData($data);
return $view;
}
public function postFooAction(Request $request)
{
$foobar = new FooBar();
$form = $this->createForm(FooBarType::class, $foobar);
$data = json_decode($request->getContent(), true);
$form->submit($data);
if ($form->isValid()) {
//$foobar = $form->getData();
$response = new Response('All good');
$response->setStatusCode(Response::HTTP_OK);
return $response;
}
return View::create($form, Response::HTTP_BAD_REQUEST);
}
}
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class FooBarType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('fieldOne')
->add('fieldTwo')
;
}
}
フーFooBarType.phpバーエンティティ問題は、フォームのここでの方法を提出の型キャストの間に発生する
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* FooBar
*
* @ORM\Table(name="foo_bar")
* @ORM\Entity(repositoryClass="AppBundle\Repository\FooBarRepository")
*/
class FooBar
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @Assert\Type("string")
* @ORM\Column(name="field_one", type="string", length=255)
*/
private $fieldOne;
/**
* @var int
*
* @Assert\Range(
* min = 1,
* max = 10,
* minMessage = "You must be at least {{ limit }}cm tall to enter",
* maxMessage = "You cannot be taller than {{ limit }}cm to enter"
*)
* @ORM\Column(name="field_two", type="int")
*/
private $fieldTwo;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set fieldOne
*
* @param string $fieldOne
*
* @return FooBar
*/
public function setFieldOne($fieldOne)
{
$this->fieldOne = $fieldOne;
return $this;
}
/**
* Get fieldOne
*
* @return string
*/
public function getFieldOne()
{
return $this->fieldOne;
}
/**
* Set fieldTwo
*
* @param int $fieldTwo
*
* @return FooBar
*/
public function setFieldTwo($fieldTwo)
{
$this->fieldTwo = $fieldTwo;
return $this;
}
/**
* Get fieldOne
*
* @return string
*/
public function getFieldTwo()
{
return $this->fieldTwo;
}
}
徹底的に説明していただきありがとうございます。 – MikelAlejoBR