0

さて、質問のタイトルと同じように、誰でも助けることができますか?iは、文字列の前後ではないすべての空白を意味します。トリムオプションがtrueになっているのがわかりますが、これは私が望んでいることではありません。

4

1 に答える 1

3

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() );
}
于 2012-05-16T15:54:41.770 に答える