我在产品和属性之间有很多关系。我在我的产品表单中使用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']
}
}
}
}
答案 0 :(得分:0)
我最终避免使用Symfony的表单并保存模型而不是保存表单。使用嵌入表单时可以更容易。 http://arialdomartini.wordpress.com/2011/04/01/how-to-kill-symfony%E2%80%99s-forms-and-live-well/
答案 1 :(得分:0)
通过检查发布的值是否为文件来解决它,如果filename和value_delete都为null,则从数组中取消设置。这可能不是最好的做法,但它现在有效。
基于http://www.symfony-project.org/more-with-symfony/1_4/en/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;
}
}