<?php
namespace Kzl\HanabusaBundle\Form\EventSubscriber;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvents;
use Kzl\HanabusaBundle\Tools\ToolString;
/**
* Intの入力値をbooleanへ変換するクラス
* ラジオボタンをtrue or false で使いたい場合に使用する。
* @author kawaguchi@kuzilla.co.jp
*/
class IntegerToBoolSubscriber implements EventSubscriberInterface
{
/**
* このイベントを結びつけるプロパティ名
* @var string
*/
private $property = '';
/**TODO tsuruta いったんコメントアウト
* コンストラクタ
* @param string $property プロパティ名
*/
// public function __construct(string $property)
// {
// $this->property = $property;
// }
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
// ディスパッチャに form.pre_set_data イベントをリッスンして
// preSetData メソッドが呼ばれるように伝えます
return array(
FormEvents::PRE_SET_DATA => 'setData'
);
}
public function setData(FormEvent $event)
{
$data = $event->getData();
if(null === $data) {
return;
}
// ゲッター・セッター文字列
$getter = 'get'.ToolString::camelize($this->property);
$setter = 'set'.ToolString::camelize($this->property);
if(is_bool($data->$getter()))
{
return;
}
$data->$setter($data->$getter() ? true : false);
$event->setData($data);
}
}