Upv*_*ote 10 symfony-forms symfony symfony-2.1
FormType:
class BranchFormType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('name');
}
public function getName() {
return 'branch';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'My\MainBundle\Entity\Branch',
));
}
}
Run Code Online (Sandbox Code Playgroud)
在实体定义中:
<field name="name" column="name" type="string" length="255"/>
Run Code Online (Sandbox Code Playgroud)
没有nullable = true,并且字段在呈现时具有必需属性.
Validation.yml:
My\MainBundle\Entity\Branch:
properties:
name:
- NotBlank: ~
Run Code Online (Sandbox Code Playgroud)
symfony是自动查找此文件还是必须包含在某处?doc只是声明表单自动使用验证服务.
控制器:
$branch = new Branch();
$form = $this->createForm(new BranchFormType(), $branch);
if ($request->isMethod('POST')) {
$form->bindRequest($request);
if ($form->isValid()) {
$em->persist($branch);
$em->flush();
return $this->redirect($this->generateUrl('view_branch'));
}
}
return $this->render('MyMainBundle:Branch:create.html.twig', array(
'form' => $form->createView()
));
Run Code Online (Sandbox Code Playgroud)
在提交时我收到以下错误:
SQLSTATE [23000]:完整性约束违规:1048列"名称"不能为空
所以isValid返回true,尽管name是空的并且继续持有具有空值的实体.当名称为空时,isValid如何返回true?ORM定义说nullable = false?`有什么想法吗?我没有定义额外的验证器.我用的是sf2.1
验证文件看起来位于正确的文件夹中:
src/My/MainBundle/Resources/config/validation.yml
Run Code Online (Sandbox Code Playgroud)
确保您没有使用验证组?
无论如何,我会用它Assert来看看这个验证文件是否有问题:
启用注释:
# app/config/config.yml
framework:
validation: { enable_annotations: true }
Run Code Online (Sandbox Code Playgroud)
设置您的实体:
namespace My\MainBundle\Entity\;
use Symfony\Component\Validator\Constraints as Assert;
//...
class Branch{
/**
* @Assert\NotBlank
*/
protected $name;
}
Run Code Online (Sandbox Code Playgroud)
你能试试这个吗?
此外,您可以从控制器中像这样测试验证:
// ...
use My\MainBundle\Entity\Branch;
public function indexAction()
{
$branch = new Branch();
$branch->setName('');
$validator = $this->get('validator');
$errors = $validator->validate($branch);
if (count($errors) > 0) {
return new Response(print_r($errors, true));
} else {
return new Response('Entity is valid');
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4479 次 |
| 最近记录: |