2012-07-07 3 views
0

많은 질문에 사과드립니다.하지만 심포니를 처음 사용했습니다. 나는 모든 것이 잘 작동하는 형태로 만들었습니다. 나는 그림 (그림 1, 그림 2, 그림 3 등)에 대한 몇 가지 필드. te sfWidgetFormInputFile을 사용했으며 모두 잘 작동합니다. 그것은 필요한 곳에 파일을 업로드하고 고유 한 이름을 부여합니다.Symfony sfWidgetFormInputFile이 (가) 내 파일을 삭제했습니다.

내가 겪고있는 문제는 그 필드가 "no-pic.png"의 기본값을 갖도록 mySQL에 설정되어 있기 때문에 사용자가 사진을 업로드하지 않으면 여전히 보여줄 것이 있습니다. 게시물에. 그러나 누군가 사진을 업로드 할 때마다 내 no-pic.png 파일을 삭제하고 사진이없는 게시물은 빈 칸으로 표시합니다. 서버에 남아있는 사용하지 않은 그림을 줄이기 위해 새 이미지를 업로드하기 전에 "이전 이미지 삭제"로 설정되어 있기 때문에 생각합니다.

폴더에서 삭제하기 전에 값이 "no-pic.png"인지 확인하는 방법이 있는지 궁금합니다. 도움이 될 경우, 이것은 form.class 파일에서 사용하는 코드입니다.

 $this->widgetSchema['picture1'] = new sfWidgetFormInputFile(array('label' => 'Pictures',)); 
    $this->validatorSchema['picture1'] = new sfValidatorFile(array('required' => false, 'path' => sfConfig::get('sf_upload_dir').'/car', 'mime_types' => 'web_images',)); 
    $this->widgetSchema['picture1'] = new sfWidgetFormInputFileEditable(array(
    'label' => 'Pictures', 
    'file_src' => '/uploads/car/'.$this->getObject()->getPicture1(), 
    'is_image' => true, 
    'edit_mode' => !$this->isNew(), 
    'template' => '<div>%file%<br />%input%<br />%delete%%delete_label%</div>', 
    )); 
    $this->validatorSchema['picture_delete'] = new sfValidatorPass(); 
+0

이미지 업로드를 편집 할 수있는 첫 번째 줄은 필요하지 않습니다. symfony가 업로드 및 삭제 작업을 처리하지만, 어떤 이유로 (적어도 내 경험으로는) 동시에 새 파일을 삭제하고 업로드 할 수는 없습니다. –

+0

차가움. 나는 첫 번째 줄을 꺼내었지만 여전히 작동하지만 삭제 자체를 제어 할 수 있어야합니다. 방금 게시물을 추가하고 이미지를 업로드했으며 no-pic.png는 사라졌습니다. 나는 그것을 읽기 전용으로 만들려고 노력했다. 여전히 삭제됩니다. – djcloud23

+0

오케이. 네가하고 싶은 것을 더 잘 이해한다. 컨트롤러에서 폼을 바인드하여 삭제 여부를 확인하고 그림이 no-pic.png가 아닌지 확인하는 것이 가장 쉬운 방법입니다. 두 조건이 모두 거짓이면 객체를 잡고 업데이트하십시오. bindAndSave는 자동으로 삭제를 처리하고 저장하기를 원하지만 원하는대로 사용자 정의 논리를 실제로 수행 할 수없는 경우에 유용합니다. –

답변

0

해결 방법이 있습니다. 페이지가 no-pic.png로 설정되었는지 확인한 다음 다른 위치에 no-pic.png를 표시합니다. 그렇게하면 사진을 업로드 할 때 삭제되지 않습니다. :) 그래도 도와 ​​줘서 고마워.

+0

멋진 거래. 내가 사용한 코드를 찾아서 참조 용으로 게시했습니다. 그래도 심플하지만 symfony는 모든 작업을 수행합니다. –

1

여기에 내가 사용한 코드가 있습니다.

$this->setWidget('logo_image', new sfWidgetFormInputFileEditable(array(
    'file_src' => 'uploads/logos/'.$this->getObject()->getFilename(), 
    'edit_mode' => !$this->isNew() 
))); 

$validatorOptions = array(
    'max_size'   => 1024*1024*10, 
    'path'    => sfConfig::get('sf_upload_dir').'/logos', 
    'mime_type_guessers' => array(), 
    'required'   => false 
); 

if ($this->isNew()) 
{ 
    $validatorOptions['required'] = true; 
} 

$this->setValidator('logo_image', new sfValidatorFile($validatorOptions)); 
$this->setValidator('logo_image_delete', new sfValidatorString(array('required' => false))); 
관련 문제