无法使用 CraueFormFlowBundle 上传文件



我正在尝试使用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;
// ....

虽然我的实体是这样设置的:

/**
 * RayCentralBundleEntityClient
 *
 * @ORMTable(name="clients")
 * @ORMEntity(repositoryClass="RayCentralBundleEntityClientRepository")
 * @ORMHasLifecycleCallbacks
 */
class Client implements UserInterface
{
    private $filenameForRemove;
    /**
     * @var string $username
     *
     * @ORMColumn(name="username", type="string", length=255)
     */
    private $username;
    /**
     * @var file $file
     *
     * @AssertFile(maxSize="6000000")
     */
    public $file;
    // ...

似乎在调用$flow->saveCurrentStepData();时,$form['file']被填充并指向临时文件。

我不明白的是,为什么在下一步中,文件值不会存储在会话中。

我扩展了CraueFormFlowBundleFormFormFlowgetSessionData()方法,如下所示:

protected function getSessionData() {
    var_dump($this->session->get($this->sessionDataKey, array()));
    return $this->session->get($this->sessionDataKey, array());
}

正如预期的那样,这为我提供了除"文件"之外的所有表单数据......

如何让文件上传与此捆绑包一起使用?

这是因为您无法在会话中存储文件...

这里有一个管理它的可能性。

控制器

// ...
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);
}

相关内容

  • 没有找到相关文章

最新更新