Я создал форму, в которую я вставляю другую форму. Мой вопрос касается этой встроенной формы. Я использую виджет sfWidgetFormDoctrineChoice с множественным параметром, установленным в true. Код метода настройки этой встроенной формы:
public function configure()
{
unset($this['prerequisite_id']);
$this->setWidget('prerequisite_id', new sfWidgetFormDoctrineChoice(array(
'model' => 'Stage',
'query' => Doctrine_Query::create()->select('s.id, s.name')->from('Stage s')->where('s.workflow_id = ?', $this->getOption('workflow_id') ),
'multiple' => true
)));
$this->setValidator('prerequisite_id', new sfValidatorDoctrineChoice(array(
'model' => 'Stage',
'multiple' => true,
'query' => Doctrine_Query::create()->select('s.id, s.name')->from('Stage s')->where('s.workflow_id = ?', $this->getOption('workflow_id') ),
'column' => 'id'
)));
}
Я отключил поле prerequisite_id
, потому что оно включено в базовую форму, но я хочу, чтобы это был множественный выбор. Теперь, когда я добавил валидатор, все вроде работает (проходит проверку), но похоже, что у него проблемы с сохранением записей, если отправлено более одного выбора.
Я получаю это предупреждение PHP после отправки формы:
Предупреждение: strlen() ожидает, что параметр 1 будет строкой, массивом, указанным в D:\Development\www\flow_dms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\database\sfDoctrineConnectionProfiler.class.php в строке 198.
и еще - я знаю, почему - в режиме отладки symfony я вижу в трассировке стека следующее:
at Doctrine_Connection->exec('ВСТАВИТЬ В stage_has_prerequisites (prerequisite_id, stage_id) VALUES (?,?)', array(array('12', '79'), '103'))
Итак, что делает Symfony, так это отправляет в Doctrine массив вариантов, и, как я вижу в отладочном sql-запросе, Doctrine не может правильно отобразить запрос.
Есть идеи, как это исправить? Мне нужно было бы сгенерировать два запроса для двух вариантов:
INSERT INTO stage_has_prerequisites (prerequisite_id, stage_id) VALUES (12, 103);
INSERT INTO stage_has_prerequisites (prerequisite_id, stage_id) VALUES (79, 103);
stage_id
всегда одно и то же (я имею в виду, что оно задается вне этой формы формой, в которую оно встроено).
Я уже потратил 4 часа на проблему, так что, возможно, кто-то сможет помочь.