わかるんですかね?
DBにファイル名だけを管理させ、実際のファイル自体は
web/image/xxxなどどっかにアップロードさせて管理したいです。
まず、backendでgenerator.ymlとかいじる系はやってしまって。
フォームでファイルをアップするのを付け加えるにはバリデータとかウィジットとか登録するらしい。
こんなの知るかよ。
class ImageForm extends BaseImageForm { public function configure() { parent::configure(); unset( $this['created_at'], $this['updated_at'] ); $this->widgetSchema['fileName'] = new sfWidgetFormInputFileEditable(array( 'label' => 'fileName', 'file_src' => sfConfig::get('app_image_path').$this->getObject()->getFileName(), 'is_image' => true, 'edit_mode' => !$this->isNew(), 'with_delete' => true, 'template' => '%file%',)); $this->validatorSchema['fileName'] = new sfValidatorFile(array( 'required' => true, 'path' => sfConfig::get('app_image_path'), 'validated_file_class' => 'CustomValidatedFile', 'mime_types' => 'web_images', )); } }
%input%
%delete% %delete_label%
いろいろ細かいファイルパスとかはうまいことやってください。
で、勝手にぐちゃぐちゃしたファイル名を付けやがるので、オリジナルのファイル名で管理したければ
sfValidatorFileのコンストラクタに
'validated_file_class' => 'CustomValidatedFile',
を追加して
こうするらしいです。
class CustomValidatedFile extends sfValidatedFile { public function generateFilename() { return $this->getOriginalName(); } }知るか!
さらに、deleteしてもファイル自体は消えないので
class Image extends BaseImage { public function postDelete($event) { $filename = $this->getFilename(); $filepath = sfConfig::get('app_image_path') . $filename; @unlink($filepath); } }とするらしいです。
知るか!
0 件のコメント:
コメントを投稿