Php 使用断言批注的Symfony2验证无效
更新:因为我没有得到任何答案,所以我用一个简单得多的例子重写了整篇文章。希望这有助于暴露问题 我在表单验证方面遇到问题。我可以让NotBlank()断言工作,但Type()对我不起作用。首先,代码如下:Php 使用断言批注的Symfony2验证无效,php,validation,symfony,Php,Validation,Symfony,更新:因为我没有得到任何答案,所以我用一个简单得多的例子重写了整篇文章。希望这有助于暴露问题 我在表单验证方面遇到问题。我可以让NotBlank()断言工作,但Type()对我不起作用。首先,代码如下: /* ...\Entity\LineItem.php */ <?php namespace Rialto\ExperimentBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Lin
/* ...\Entity\LineItem.php */
<?php
namespace Rialto\ExperimentBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class LineItem
{
/**
* @var integer
* @Assert\NotBlank()
* @Assert\Type(type="integer")
*/
private $quantity = 0;
public function getQuantity()
{
return $this->quantity;
}
public function setQuantity($quantity)
{
$this->quantity = $quantity;
}
}
/* ...\Controller\DefaultController.php */
<?php
namespace Rialto\ExperimentBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Rialto\ExperimentBundle\Entity\LineItem;
class DefaultController extends Controller
{
public function indexAction()
{
return $this->testValidation();
}
private function testValidation()
{
$item = new LineItem();
$form = $this->createFormBuilder($item)
->add('quantity', 'integer')
->getForm();
$request = $this->getRequest();
if ( $request->getMethod() == 'POST') {
$form->bindRequest($request);
if ( $form->isValid() ) {
return new Response('Form is valid.');
}
}
return $this->render('RialtoCoreBundle:Form:basicForm.html.twig', array(
'form' => $form->createView(),
));
}
}
/*…\Entity\LineItem.php*/
也许你应该改变这一点:
$this->isPost( $request )
为此:
$request->isPost()
这只是一个猜测,但我希望能有所帮助 之所以不能按预期工作,是因为Symfony的NumberFormatter存根实现中存在错误。如果没有安装PHP intl扩展,将使用存根实现
基本上,数字格式化程序尝试解析值和。它应该设置一个错误代码,然后在转换器中触发一个异常,但是,因为它没有,所以使用了布尔值false,并且(这本身也是一个bug)。因此,“adsf”输入以整数0结束,并传递类型断言
我找到了这两个bug,并向它发送了请求
你可以使用这些补丁来解决这个问题,或者你现在可以通过添加一个限制设置为1的方法来解决这个问题。我忘了提到$this->isPost($request)
是我写的一个方法。这相当于说$request->getMethod()=“POST”
。此外,该块中的代码正在执行(应该是这样),所以我认为这不是问题所在。答案很好!谢谢你的链接,特别是关于bug报告的链接。