2012-05-08 9 views
6

हटाना वर्तमान में मैं एक रूपका उपयोग संपादन के लिए एक ही Symfony 2 प्रपत्र और (खेतों में मतभेद)

class Project extends AbstractType { 
    public function buildForm(FormBuilder $builder, array $options) { 
     $builder->add('name'); 
     $builder->add('description', 'textarea'); 
     $builder->add('iconFile', 'file', array('label' => 'Icon', 'required' => false)); 
    } 
    // ... 
} 

है मैं संपादित & के लिए उपयोग कर रहा हूँ अब तक ठीक से हटा दें। लेकिन अब, संपादन "मोड" में, मैं इस परियोजना के लिए उपयोगकर्ता को icon साफ़ करने की अनुमति देना चाहता हूं। मुझे लगता है कि मैं एक रेडियो बटन जोड़ सकता हूं, लेकिन मुझे इसे एड मोड में "निष्क्रिय" होने की आवश्यकता होगी। अभी के लिए मैं अपने मॉडल में छवि अपलोड निपटने रहा हूँ, और मैं इसे वहाँ की उम्मीद करता हूँ

/** 
* If isDirty && iconFile is null: deletes old icon (if any). 
* Else, replace/upload icon 
* 
* @ORM\PrePersist 
* @ORM\PreUpdate 
*/ 
public function updateIcon() { 

    $oldIcon = $this->iconUrl; 

    if ($this->isDirty && $this->iconFile == null) { 

     if (!empty($oldIcon) && file_exists(APP_ROOT . '/uploads/' . $oldIcon)) 
      unlink($oldIcon); 

    } else { 

     // exit if not dirty | not valid 
     if (!$this->isDirty || !$this->iconFile->isValid()) 
      return; 

     // guess the extension 
     $ext = $this->iconFile->guessExtension(); 
     if (!$ext) 
      $ext = 'png'; 

     // upload the icon (new name will be "proj_{id}_{time}.{ext}") 
     $newIcon = sprintf('proj_%d_%d.%s', $this->id, time(), $ext); 
     $this->iconFile->move(APP_ROOT . '/uploads/', $newIcon); 

     // set icon with path to icon (relative to app root) 
     $this->iconUrl = $newIcon; 

     // delete the old file if any 
     if (file_exists(APP_ROOT . '/uploads/' . $oldIcon) 
      && is_file(APP_ROOT . '/uploads/' . $oldIcon)) 
      unlink($oldIcon); 

     // cleanup 
     unset($this->iconFile); 
     $this->isDirty = false; 
    } 

} 

उत्तर

12

आप डेटा का उपयोग कर प्रपत्र निर्माण के दौरान की स्थिति डाल सकते हैं (यह करने के लिए एक बेहतर जगह theres जब तक):

class Project extends AbstractType { 
    public function buildForm(FormBuilder $builder, array $options) { 
     $builder->add('name'); 
     $builder->add('description', 'textarea'); 
     $builder->add('iconFile', 'file', array('label' => 'Icon', 'required' => false)); 

     if ($builder->getData()->isNew()) { // or !getId() 
      $builder->add('delete', 'checkbox'); // or whatever 
     } 
    } 
    // ... 
} 
संबंधित मुद्दे