Symfony: исключить пустые значения из формы сохранения - PullRequest
0 голосов
/ 11 июля 2011

У меня есть отношение многие ко многим между продуктом и свойствами.Я использую embedRelation () в моей форме продукта для редактирования продукта и его свойств.Свойства включают в себя изображения, которые вызывают мою проблему.Каждый раз, когда я сохраняю форму, столбец updated_at обновляется для свойств файла, даже если файл не загружен.

Поэтому я хочу исключить пустые свойства при сохранении моей формы.

Я использую Symfony 1.4 и Doctrine 1.2.

Я думаю, что-то подобное вProductForm.class.php, но мне нужно немного информации о том, как заставить это работать.

Спасибо

class ProductForm extends BaseProductForm
{
  public function configure()
  {
        unset($this['created_at'], $this['updated_at'], $this['id'], $this['slug']);

        $this->embedRelation('ProductProperties');
  }

    public function saveEmbeddedForms($con = null, $forms = null)
    {
      if (null === $forms)
      {
        $properties = $this->getValue('ProductProperties');
        $forms = $this->embeddedForms;

        foreach($properties as $p)
        {
            // If property value is empty, unset from $forms['ProductProperties']
        }
        }
    }

}

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Решил, проверив, является ли опубликованное значение файлом, и если и filename, и value_delete равно null, я удаляю из массива. Возможно, это не лучшая практика, но пока это работает.

Решение на основе http://www.symfony -project.org / more-with-symfony / 1_4 / ru / 06-Advanced-Forms

    class ProductPropertyValidatorSchema extends sfValidatorSchema
    {
      protected function configure($options = array(), $messages = array())
      {
            // N0thing to configure
      }

      protected function doClean($values)
      {
        $errorSchema = new sfValidatorErrorSchema($this);

        foreach($values as $key => $value)
        {
          $errorSchemaLocal = new sfValidatorErrorSchema($this);

                if(array_key_exists('value_delete', $values))
                {
                    if(!$value && !$values['value_delete'])
                    {
                        unset($values[$key]);
                    }
                }

          // Some error for this embedded-form
          if (count($errorSchemaLocal))
          {
            $errorSchema->addError($errorSchemaLocal, (string) $key);
          }
        }

        // Throws the error for the main form
        if (count($errorSchema))
        {
          throw new sfValidatorErrorSchema($this, $errorSchema);
        }

        return $values;
      }
    }
0 голосов
/ 11 июля 2011

В итоге я отказался от форм Symfony и сохранения моделей вместо сохранения форм. Это может быть проще при игре со встроенными формами. http://arialdomartini.wordpress.com/2011/04/01/how-to-kill-symfony%E2%80%99s-forms-and-live-well/

...