在bindrequest之前删除输入文本字段中的所有空格

时间:2012-05-16 14:32:45

标签: symfony

好吧,就像问题的标题一样,任何人都可以提供帮助吗?我指的是字符串之前和之后的所有空格。我只看到修剪选项为true,这不是我想要的。

1 个答案:

答案 0 :(得分:2)

Symfony使用EventListener在内部处理此问题。我想你可以为自己的目的窃取这种技术。

namespace Your\Bundle\Form\Extension\Core\EventListener;

use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\Event\FilterDataEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class StripWhitespaceListener implements EventSubscriberInterface
{
  public function onBindClientData( FilterDataEvent $event )
  {
    $data = $event->getData();

    if ( is_string( $data ) )
    {
      $event->setData( preg_replace( "/\s/", "", $data ) );
    }
  }

  static public function getSubscribedEvents()
  {
    return array( FormEvents::BIND_CLIENT_DATA => 'onBindClientData' );
  }
}

然后,在您的表单中输入buildForm()

public function buildForm( FormBuilder $builder, array $options )
{
  $builder
    ->add( 'foo', 'text', array( 'label' => 'Foo' ) )
  ;

  $builder->get( 'foo' )->addEventSubscriber( new StripWhitespaceListener() );
}