내 문제는 여기에 있습니다. 기본 데이터를 기반으로 폼에 필드를 추가해야하지만 필드에 데이터 변환기를 추가해야합니다.이벤트 수신기 내부에 데이터 변환기를 추가하는 방법
나는 해결책이 간단 할 것이라고 생각했다. 폼에 PRE_SET_DATA 이벤트 리스너를 추가하고 (단지 기본 데이터에 액세스하기 위해) 필드와 트랜스 포머를 리스너 내부에 추가하기 만하면된다. 하지만 양식이 이미 잠겨 있기 때문에 수신기 내부에 변압기를 추가 할 수 없습니다.
많은 해결 방법을 시도했지만 해결할 수 없었습니다.
그것을 할 수있는 방법이 있나요 ... 내가 이벤트 리스너 내부 양식에 날짜 필드를 추가 할 때 데이터 변압기 그래서$builder->...
->add(
$builder->create('date', 'choice', array(
'label' => 'form.game.date',
'empty_value' => 'form.game.date',
'required' => false,
'choices' => array(
'2014-04-10' => '10/Apr', // just to test
'2014-04-11' => '11/Apr',
)
))
->addModelTransformer(new DateToStringTransformer())
);
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($builder) {
$game = $event->getData();
$form = $event->getForm();
$period = new \DatePeriod(
$game->getTournament()->getBeginDate(),
new \DateInterval('P1D'),
$game->getTournament()->getEndDate()->add(new \DateInterval('P1D'))
);
$dates = array();
foreach($period as $date){
$dates[$date->format("Y-m-d")] = $date->format("j/M");
}
$form->add('date', 'choice', array(
'label' => 'form.game.date',
'choices' => $dates,
));
});
는, 이전에 추가 된 데이터 필드를 교체 : 그녀는 내 코드입니까?
답변에이 코드를 삽입하십시오. 링크가 아닌 자체적으로 포함됩니다. –
코드를 삽입했습니다. – Ziumin
나는 또한 당신의 aproach를 시도했으며, 아마도 "$ builder-> addEventListener"를 호출하기 전에 일부 필드를 추가했기 때문에 이벤트 수신기 내부의 빌더를 사용할 수 없다. 그리고 그 순간에 양식은 이미 잠겨있다. 난 항상 데이터 변압기를 추가하는 사용자 지정 형식을 만들어서 작동하도록했습니다. 그런 다음 데이터 변압기를 놓치지 않고 모든 이벤트 리스너에서 "form-> add ('date', 'my_type', ..)를 호출 할 수 있습니다. 도움을 주셔서 감사합니다 –