我想添加验证,以便关键字和字段表单元素成为必需元素。但这些并不附属于任何类型的实体。我只是要在我的控制器中处理请求。我对HTML5验证不感兴趣,我可以自己做。
规则: Keyword
不能为空,Field
除 firstname 或 middlename 值之外不能有任何内容。
表格类型:
class SearchType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$field = array('' => '', 'firstname' => 'Firstname', 'middlename' => 'Middlename');
$builder
->setAction($options['action'])
->setMethod('POST')
->add('keyword', 'text', array('label' => 'Keyword', 'error_bubbling' => true))
->add('field', 'choice', array('label' => 'Field', 'choices' => $field, 'error_bubbling' => true))
->add('search', 'submit', array('label' => 'Search'));
}
public function getName()
{
return 'personsearch';
}
}
控制器:
class SearchController extends Controller
{
public function indexAction()
{
$form = $this->createForm(new SearchType(), array(),
array('action' => $this->generateUrl('searchDo')));
return $this->render('SeHirBundle:Default:search.html.twig',
array('page' => 'Search', 'form' => $form->createView()));
}
public function searchAction(Request $request)
{
//I'll carry out searching process here
}
}
答案 0 :(得分:1)
文档中的此页面详细说明了如何执行您想要的操作:http://symfony.com/doc/current/book/validation.html
具体来说,通过表单的实现,您可以执行以下操作:
use Symfony\Component\Validator\Constraints\NotBlank;
// ...
$builder
->setAction($options['action'])
->setMethod('POST')
->add('keyword', 'text', array(
'label' => 'Keyword',
'error_bubbling' => true,
'constraints' => array(
new NotBlank(),
)
))
->add('field', 'choice', array(
'label' => 'Field',
'choices' => $field,
'error_bubbling' => true
))
->add('search', 'submit', array(
'label' => 'Search'
))
;
有关详情,请参阅:http://symfony.com/doc/current/book/forms.html#using-a-form-without-a-class
对于您的field
元素,您可能需要自己制定一个新约束。
您可能还想查看“验证和表单”部分。我个人更喜欢在进行验证时使用注释方法。
如果要使用该方法,请在模型上添加以下用法语句:
use Symfony\Component\Validator\Constraints as Assert;
然后在要验证的属性上方使用注释:
/**
* @Assert\NotBlank()
*/
public $name;
可以在此处找到并描述所有可用的约束:http://symfony.com/doc/current/book/validation.html#validation-constraints
从您的代码中,您似乎没有检查表单是否有效,您可以添加此部分,然后在模型被视为有效时重定向到您的搜索操作。