File upload 如何让用户选择上传目录?

File upload 如何让用户选择上传目录?,file-upload,symfony1,File Upload,Symfony1,我有一个表单用于在我的博客引擎中上传图像。文件上传到web/上传,但我想添加一个“选择”小部件,让用户从文件夹列表中选择,例如“照片”、“剪贴画”、“徽标” 这是我的表格 class ImageForm extends BaseForm { public function configure() { $this->widgetSchema->setNameFormat('image[%s]'); $this->setWidget('file', new

我有一个表单用于在我的博客引擎中上传图像。文件上传到web/上传,但我想添加一个“选择”小部件,让用户从文件夹列表中选择,例如“照片”、“剪贴画”、“徽标”

这是我的表格

class ImageForm extends BaseForm
{
  public function configure()
  {
    $this->widgetSchema->setNameFormat('image[%s]');

    $this->setWidget('file', new sfWidgetFormInputFileEditable(
      array(
        'edit_mode'=>false,
        'with_delete' => false,
        'file_src' => '',
        )
    ));

    $this->setValidator('file', new mysfValidatorFile(
      array(
        'max_size' => 500000,
        'mime_types' => 'web_images',
        'path' => 'uploads',
        'required' => true
        )

    ));

    $this->setWidget('folder', new sfWidgetFormChoice(array(
      'expanded' => false,
      'multiple' => false,
      'choices'  => array('photos', 'cliparts', 'logos')
       )
    ));

    $this->setValidator('folder', new sfValidatorChoice(array(
      'choices' => array(0,1,2)
    )));


  }


}
下面是我的行动:

  public function executeAjout(sfWebRequest $request)
  {
    $this->form = new ImageForm();

    if ($request->isMethod('post'))
    {
      $this->form->bind(
        $request->getParameter($this->form->getName()),
        $request->getFiles($this->form->getName())
      );

      if ($this->form->isValid())
      {
           $this->form->getValue('file')->save();
           $this->image = $this->form->getValue('file');
      }

    }
class mySfValidatorFile extends sfValidatorFile
{

    protected function configure($options = array(), $messages =
array())
    {
        parent::configure();
        $this->addOption('validated_file_class',
'sfValidatedFileFab');
    }

}

class sfValidatedFileFab extends sfValidatedFile
{
    public function generateFilename()
    {
      return $this->getOriginalName();
    }
} 
我正在使用自定义文件验证程序:

  public function executeAjout(sfWebRequest $request)
  {
    $this->form = new ImageForm();

    if ($request->isMethod('post'))
    {
      $this->form->bind(
        $request->getParameter($this->form->getName()),
        $request->getFiles($this->form->getName())
      );

      if ($this->form->isValid())
      {
           $this->form->getValue('file')->save();
           $this->image = $this->form->getValue('file');
      }

    }
class mySfValidatorFile extends sfValidatorFile
{

    protected function configure($options = array(), $messages =
array())
    {
        parent::configure();
        $this->addOption('validated_file_class',
'sfValidatedFileFab');
    }

}

class sfValidatedFileFab extends sfValidatedFile
{
    public function generateFilename()
    {
      return $this->getOriginalName();
    }
} 

那么,我如何告诉文件上传小部件将图像保存到另一个文件夹中呢?

您可以将您所说的目录名(“照片”、“剪贴画”、“徽标”)连接到sf_upload_目录,正如下面的代码所示,您当然需要创建这些目录

$this->validatorSchema['file'] = new sfValidatorFile(
          array('path' => sfConfig::get('sf_upload_dir' . '/' . $path)
       ));

另外,您可以在app.yml配置文件中包含这些目录的详细信息,并让它们调用
sfConfig::get()
方法。

我让它与以下代码一起工作:

  public function executeAdd(sfWebRequest $request)
  {
    $this->form = new ImageForm();

    if ($request->isMethod('post'))
    {
      $this->form->bind(
        $request->getParameter($this->form->getName()),
        $request->getFiles($this->form->getName())
      );

      if ($this->form->isValid())
      {
           //quel est le dossier ?
           switch($this->form->getValue('folder'))
           {
             case 0:
               $this->folder = '/images/clipart/';
               break;
             case 1:
               $this->folder = '/images/test/';
               break;
             case 2:
               $this->folder = '/images/program/';
               break;
             case 3:
               $this->folder = '/images/smilies/';
               break;

           }

           $filename = $this->form->getValue('file')->getOriginalName();
           $this->form->getValue('file')->save(sfConfig::get('sf_web_dir').$this->folder.$filename);

           //path :
           $this->image = $this->folder.$filename;
      }

    }