我正在尝试使用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());
}
这给了我所有的表格数据,除了“文件”之外,正如所料......
如何使用此捆绑包上传文件?
答案 0 :(得分: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的自定义Bundle)
public function saveCurrentStepData($data = false) {
$sessionData = $this->getSessionData();
$sessionData[$this->currentStep] = $data ? $data : $this->request->request->get($this->formType->getName(), array()) ;
$this->setSessionData($sessionData);
}