0

CraueFormFlowBundleを使用してマルチステップ形式でファイルをアップロードしようとしています。

すべてが正常に機能していますが、プロセスの最後に、以前は機能していたファイルパスでエンティティが更新されることはありません。

これが基本的に私がやろうとしていることです:

// FormType

public function buildForm(FormBuilder $builder, array $options) {
    switch ($options['flowStep']) {
        case 1:
            $builder->add('username', 'text', array('label'=>'Votre pseudo','required'=>false))
                ->add('file','file', array('label'=>'Photo de profil','required'=>false));
            break;
// ....

私のエンティティがこのように設定されている間:

/**
 * Ray\CentralBundle\Entity\Client
 *
 * @ORM\Table(name="clients")
 * @ORM\Entity(repositoryClass="Ray\CentralBundle\Entity\ClientRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Client implements UserInterface
{
    private $filenameForRemove;

    /**
     * @var string $username
     *
     * @ORM\Column(name="username", type="string", length=255)
     */
    private $username;

    /**
     * @var file $file
     *
     * @Assert\File(maxSize="6000000")
     */
    public $file;

    // ...

$flow->saveCurrentStepData();が呼び出されると、$form['file']いっぱいになり、一時ファイルを指しているようです。

私が得られないのは、次のステップでファイル値がセッションに保存されない理由です。

私はこのようなgetSessionData()方法を拡張しましたCraue\FormFlowBundle\Form\FormFlow

protected function getSessionData() {

    var_dump($this->session->get($this->sessionDataKey, array()));

    return $this->session->get($this->sessionDataKey, array());
}

これにより、予想どおり、「ファイル」以外のすべてのフォームデータが得られます。

このバンドルでファイルのアップロードを機能させる方法は?

4

1 に答える 1

1

これは、セッションにファイルを保存できないためです...

ここでそれを管理する可能性。

コントローラ

// ...
if ($flow->isValid($form)) {
    $data = $request->request->get($form->getName(), array());

    // upload the entity (Event) main picture
    if ($event->preUpload() && $picture = $event->upload()) {
        $data['picture'] = $picture;
    }


    // save form progress
    $flow->saveCurrentStepData($data);
// ...

エンティティイベント

// ...

public function preUpload()
{
    if(null !== $this->picturefile)
    {
        $this->picture = uniqid() . '.' . $this->picturefile->guessExtension();
        return $this->picture;
    }
}

そして、FormFlowメソッドsaveCurrentStepData()を上書きする必要があります...(getParentを使用したカスタムバンドルを使用)

public function saveCurrentStepData($data = false) {
    $sessionData = $this->getSessionData();
    $sessionData[$this->currentStep] = $data ? $data : $this->request->request->get($this->formType->getName(), array()) ;
    $this->setSessionData($sessionData);
}
于 2012-11-21T11:11:42.420 に答える