konto usunięte
Temat: embedded forms - sfWidgetFormInputFileEditable nie dzała
Posiadam dwa formularze: SpotForm (podstawowy) oraz SpotWeatherData(zagnieżdżony w relacji jeden do wielu).W zagnieżdżonym formularzu mam 2 pola tekstowe, które zapisują się poprawnie.
Oraz pole typu 'file' (sfWidgetFormInputFileEditable), które z nie wyjaśnionej przyczyny nie chce dodawać zdjęć. (Jeżeli to pole zamienię na typ tekstowy, wartość zapisuje się poprawnie)
Widget sfWidgetFormInputFileEditable w formularzu zagnieżdżonym jest zdefiniowany poprawnie, ponieważ gdy wywołam sam formularz SpotWeatherData wszystko działa tak jak powinno.
Formularz główny ma ustawione 'enctype="multipart/form-data"'.
Brak mi już pomysłów, co jeszcze może być nie tak :(
Kody:
class SpotForm extends BaseSpotForm
{
public function configure()
{
$form = new WeatherDataCollectionForm(
null,
array('spot' => $this->getObject())
);
$this->embedForm('weatherdata', $form);
$weather_data_form = new SpotWeatherDataForm();
$this->embedForm('newweatherdata', $weather_data_form);
$this->widgetSchema['newweatherdata']->setLabel('Nowe dane pogodowe');
}
}
class SpotWeatherDataForm extends BaseSpotWeatherDataForm
{
public function configure()
{
unset($this['spot_id']);
$this->widgetSchema['name']->setLabel('Nazwa zakładki');
$this->widgetSchema['description']->setLabel('Opis');
$this->widgetSchema['description'] = ptWidgetCommon::createTinyWidget(rand());
$this->widgetSchema['image'] = new sfWidgetFormInputFileEditable(array(
'label' => '<nobr>Lub grafika</nobr>',
'file_src' => '/uploads/photos/'.$this->getObject()->getImage(),
'is_image' => true,
'template' => (strlen($this->getObject()->getImage())?
'<div>%input% %delete% usuń<br /> %file%</div>':'%input%')
));
$this->validatorSchema['image_delete'] = new sfValidatorPass();
$this->validatorSchema['image'] = new sfValidatorFile(array(
'required' => false,
'mime_types' => array ('image/jpeg'),
'path' => sfConfig::get('sf_upload_dir').'/photos/'
),
array('mime_types'=> 'Nieodpowiedni format pliku (tylko pliki jpg/jpeg)',
'required' => 'Element wymagany'));
$this->validatorSchema['image_delete'] = new sfValidatorPass();
$this->widgetSchema->setHelp('image', 'Wprowadzenie grafiki blokuje wyświetlanie pola Opis');
}
}
class WeatherDataCollectionForm extends sfForm {
public function configure() {
$spot = $this->getOption('spot');
if (!$spot->isNew()) {
foreach ($spot->getWeatherDataForSpot() as $weatherData) {
$weatherData_form = new SpotWeatherDataForm($weatherData);
$this->embedForm('wd'.$weatherData->getId(), $weatherData_form);
$this->widgetSchema['wd'.$weatherData->getId()]->setLabel('Dane:');
$this->widgetSchema['wd'.$weatherData->getId()]['name'] = new sfWidgetFormInputDelete(array(
'url' => 'category/deleteSubcategory', // required
'model_id' => $weatherData->getId(), // required
'confirm' => 'Sure???', // optional
));
}
}
}
}