Създадох формуляр, в който вградих друг формуляр. Въпросът ми е относно този вграден формуляр - използвам изпълним модул 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 мога да видя следното в проследяването на стека:
в Doctrine_Connection->exec('INSERT INTO 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 часа за проблема, така че може би някой може да помогне.