0

sfWidgetFormInputFileEditable私のアクションクラスから私のファイルsrcを設定したい

次のコードを試してみましたが、常に Baseform でのみ設定した値を持っています

$this->Form->setOption('file_name',array(
    'file_src' => sfConfig::get('sf_upload_dir')."\\". $dirId ."\\".$this->imgName,
    'is_image' => true, 'edit_mode' => true, 'delete_label' => true, 'with_delete' =>false
));

$diridフォルダ名です。$diridBaseFormを取得できるのでfile_src、アクション クラスから を上書きします。

上記のコードが機能しないのはなぜですか?

4

1 に答える 1

2

一度に渡す必要があるパラメータは1つだけsetOption()です。または、を使用setOptions()してすべてのオプションを一度にオーバーライドできます。

sfWidgetFormInputFileEditable生成された基本形式で持っていますか?私はそうは思わない。生成された基本クラスを手動で編集しないでください。

ドキュメントの少なくともこの章をお読みください。

注:会社IDが必要なのはなぜですか?

次のような形にしたほうがいいと思います。

// EditSlideForm.class.php
public function configure()
{
  //...

  // use this if the file is optional
  $this->setWidget('file_name', new sfWidgetFormInputFileEditable(array(
    'file_src' => $this->getObject()->getPublicFileLocation(),
    'is_image' => true,
    'with_delete' => (boolean) $this->getObject()->getFile(),
    'edit_mode' => !$this->isNew() && $this->getObject()->getFileName(),
  )));
  $this->setValidator('file_name', new sfValidatorFile(array(
    'mime_types' => 'web_images',
    'path' => $this->getObject()->getFileDir(),
    'required' => false,
  )));
  $this->setValidator('file_name_delete', new sfValidatorBoolean());

  // use this if the file is required
  $this->setWidget('file_name', new sfWidgetFormInputFileEditable(array(
    'file_src' => $this->getObject()->getPublicFileLocation(),
    'is_image' => true,
    'with_delete' => false,
    'edit_mode' => !$this->isNew() && $this->getObject()->getFileName(),
  )));
  $this->setValidator('file_name', new sfValidatorFile(array(
    'mime_types' => 'web_images',
    'path' => $this->getObject()->getFileDir(),
  )));

  //...
}

これが私が通常行う方法です。getPublicFileLocation()モデルにとを追加する必要がありますgetFileDir()。例:

static public function getFileDir()
{
  return sfConfig::get('sf_upload_dir') . '/slide-file';
}

public function getPublicFileLocation()
{
  return str_replace(sfConfig::get('sf_web_dir'), '', self::getFileDir()) . '/' . $this->getFileName();
}
于 2013-01-05T09:53:33.207 に答える