Я делаю форму, которая состоит из текста и загружаю файлы.Проблема в том, что файл не был сохранен в db (поле blob), потому что клиент не хотел, поэтому я сделал UploadFileForm, чтобы очистить его и выполнить логику загрузки и сохранения в таблицу файлов (которая имеетпуть к этому файлу).Итак, у меня есть:
//HistoryForm
class HistoryForm extends BaseHistoryForm
{
public function configure()
{
unset($this['text']);
$this->setWidget('text', new sfWidgetFormTextareaTinyMCE(array(
'width' => 550,
'height' => 350,
'config' => 'theme_advanced_disable: "anchor,image,cleanup,help"',)));
$this->setValidator('text', new sfValidatorString());
$this->embedForm('uploadfile1', new UploadFileForm());
}
}
//UploadFileForm
class UploadFileForm extends sfForm{
public function configure() {
$this->setWidget('file', new sfWidgetFormInputFile());
$this->setValidator('file', new sfValidatorFile(array(
'required' => false,
'path' => sfConfig::get('sf_upload_dir')
)));
$this->setWidget('name', new sfWidgetFormInputText());
$this->setValidator('name', new sfValidatorString(array('required' => true)));
$this->widgetSchema->setNameFormat('uploadfile[%s]');
}
public function save({data_to_be_saved}){
//logic of saving
}
}
Основная проблема заключается в том, что внедрение формы доктрины работает отлично, но если я хочу сохранить форму, отличную от доктрины, метод сохранения никогда не вызывается (кажется, что не все sfForms должныбыть сохраненным), но если я переопределю saveEmbeddedForms , то встроенный sfForm не будет привязан!Прочитав код Symfony, выяснилось, что при внедрении формы добавление полей к основному widgetSchema приводит к тому, что использование формы для вставки практически бесполезно ... Итак, я делаю метод save вsfForm, которая выполняет сохранение, получая все необходимые переменные из параметров.Это вызов сделан в переопределенном методе save основной формы доктрины:
//HistoryForm
class HistoryForm extends BaseHistoryForm
{
...
public function save($con = null) {
$hc = parent::save($con);
foreach ($this->getEmbeddedForms() as $form) {
$values = $this->getValue($form->getName());
$form->save($hc, $values);
}
}
Я провел весь день, размышляя и читая основной код Symfony, и не нашел подходящего подхода.Итак ... кто-нибудь знает (или думает) лучший подход?