答案 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() );
}