わかるんですかね?
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%
%input%
%delete% %delete_label%
',));
$this->validatorSchema['fileName'] = new sfValidatorFile(array(
'required' => true,
'path' => sfConfig::get('app_image_path'),
'validated_file_class' => 'CustomValidatedFile',
'mime_types' => 'web_images',
));
}
}
いろいろ細かいファイルパスとかはうまいことやってください。
で、勝手にぐちゃぐちゃしたファイル名を付けやがるので、オリジナルのファイル名で管理したければ
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 件のコメント:
コメントを投稿