1

My requirement is to implement a multiple fileupload field in TYPO3 Front-end Extension. Here is what I've used for a single file upload.

My Fields in Model

/**
 * angebotuploaden
 *
 * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 */
protected $angebotuploaden = NULL;

 /**
 * Returns the angebotuploaden
 *
 * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $angebotuploaden
 */
 public function getAngebotuploaden() {
 return $this->angebotuploaden;
}

/**
 * Sets the angebotuploaden
 *
 * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $angebotuploaden
 * @return void
 */
public function setAngebotuploaden(\TYPO3\CMS\Extbase\Domain\Model\FileReference $angebotuploaden) {
    $this->angebotuploaden = $angebotuploaden;
}

Now I face issues in implementing multiple file-uploads for this field. Please help me to sort it out.

Hoja
  • 1,057
  • 1
  • 12
  • 32
  • I suggest using a Nested Model with 1:n for multiple files. Then use an ObjectStorage for this in your current Model. – Jay Dinse Jul 01 '15 at 15:36
  • @JayDinse : Could you please show me an example to implement this in modal getters and setters. – Hoja Jul 01 '15 at 17:39

1 Answers1

3

Use ObjectStorage to get an 1:n-Relation to the FileReference model. In your model that could look like this:

/**
 * uploadFiles
 *
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference>
 * @cascade remove
 */
protected $uploadFiles = NULL;

/**
 * __construct
 */
public function __construct() {
    //Do not remove the next line: It would break the functionality
    $this->initStorageObjects();
}

/**
 * Initializes all ObjectStorage properties
 * Do not modify this method!
 * It will be rewritten on each save in the extension builder
 * You may modify the constructor of this class instead
 *
 * @return void
 */
protected function initStorageObjects() {
    $this->uploadFiles = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}



/**
 * Adds a UploadFile
 *
 * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $uploadFile
 * @return void
 */
public function addUploadFile(\TYPO3\CMS\Extbase\Domain\Model\FileReference $uploadFile) {
    $this->uploadFiles->attach($uploadFile);
}

/**
 * Removes a UploadFile
 *
 * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $uploadFileToRemove The UploadFile to be removed
 * @return void
 */
public function removeUploadFile(\TYPO3\CMS\Extbase\Domain\Model\FileReference $uploadFileToRemove) {
    $this->uploadFiles->detach($uploadFileToRemove);
}

/**
 * Returns the uploadFiles
 *
 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $uploadFiles
 */
public function getUploadFiles() {
    return $this->uploadFiles;
}

/**
 * Sets the uploadFiles
 *
 * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $uploadFiles
 * @return void
 */
public function setUploadFiles(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $uploadFiles) {
    $this->uploadFiles = $uploadFiles;
}   

There're still more things to do, especially in TCA, but I don't know them in detail because I didn't use that yet. See Hemult Hummels Upload Example an this question for more detailed information.

Community
  • 1
  • 1
Jay Dinse
  • 504
  • 4
  • 19