BackendModul Entwicklung – File Upload createAction nicht aufrufbar

  • rayphi rayphi
    Padawan
    0 x
    58 Beiträge
    0 Hilfreiche Beiträge
    06. 08. 2012, 13:55

    Hallo zusammen,
    ich versuche gerade ein Backendmodul mit Extbase/Fluid zu entwickeln. Jetzt bin ich gerade dabei ein Dateiupload zu realisieren. Wenn ich nun aber mein Formular ausfülle bekomme ich immer folgende Fehlermeldung.

    Es wäre ziemlich cool wenn mir jemand sagen könnte ob ich irgendwas falsch gemacht habe! :)

    Problem-Fehlermeldung: An error occurred while trying to call Tx_Atohtmlexport_Controller_StaticHtmlExportController->createAction()

    Validation errors for argument "newStaticHtmlExport"
    newStaticHtmlExport: Validation errors for property "exportFile"

    1. public function newAction(Tx_Atohtmlexport_Domain_Model_StaticHtmlExport $newStaticHtmlExport = NULL) {
    2. if ($newStaticHtmlExport == NULL) { // workaround for fluid bug ##5636
    3. $newStaticHtmlExport = t3lib_div::makeInstance('Tx_Atohtmlexport_Domain_Model_StaticHtmlExport');
    4. }
    5. $this->view->assign('newStaticHtmlExport', $newStaticHtmlExport);
    6. }
    7.  
    8. public function createAction(Tx_Atohtmlexport_Domain_Model_StaticHtmlExport $newStaticHtmlExport) {
    9. //workaround für noch nicht vorhandene file upload unterstützung (http://typo3blogger.de/extbase-file-upload/)
    10. if ($_FILES['tx_atohtmlexport_StaticHtmlExport']) {
    11. $basicFileFunctions = t3lib_div::makeInstance('t3lib_basicFileFunctions');
    12. $fileName = $basicFileFunctions->getUniqueName(
    13. $_FILES['tx_atohtmlexport_StaticHtmlExport']['name']['newStaticHtmlExport']['exportFile'],
    14. t3lib_div::getFileAbsFileName('uploads/tx_atohtmlexport/'));
    15.  
    16. t3lib_div::upload_copy_move(
    17. $_FILES['tx_atohtmlexport_StaticHtmlExport']['tmp_name']['newStaticHtmlExport']['exportFile'], $fileName);
    18. $newStaticHtmlExport->setExportFile(basename($fileName));
    19. }
    20. $this->staticHtmlExportRepository->add($newStaticHtmlExport);
    21. $this->flashMessageContainer->add('Your new StaticHtmlExport was created.');
    22. $this->redirect('list');
    23. }

    1. <!-- Templates/StaticHtmlExport/New.html – View für newAction -->
    2. <f:render partial="FormErrors" />
    3.  
    4. <f:form enctype="multipart/form-data" method="post" controller="StaticHtmlExport" action="create" name="newStaticHtmlExport" object="{newStaticHtmlExport}">
    5. <f:render partial="StaticHtmlExport/FormFields" />
    6. <f:form.submit value="Create new" />
    7. </f:form>
    8.  
    9. <!-- Partials/StaticHtmlExport/FormFields.html – Partial für FormFields -->
    10. <label for="projectTitle">
    11. <f:translate key="tx_atohtmlexport_domain_model_statichtmlexport.project_title" /> <span class="required">(required)</span>
    12. </label><br />
    13. <f:form.textfield property="projectTitle" /><br />
    14. <label for="exportFile">
    15. <f:translate key="tx_atohtmlexport_domain_model_statichtmlexport.export_file" /> <span class="required">(required)</span>
    16. </label><br />
    17. <f:form.upload property="exportFile" /><br />

    Mit bestem Gruß
    Rayphi


  • 1
  • rayphi rayphi
    Padawan
    0 x
    58 Beiträge
    0 Hilfreiche Beiträge
    07. 08. 2012, 15:50

    so ich habe nun folgendes gefunden

    1. <f:debug title="debugname">{debug_var}</f:debug>

    damit überprüfe ich nun mein newStaticHtmlExport Object.
    Wenn ich das Formular absende, wird anscheinend der projectTitle in das Object geschrieben aber das exportFile bleibt leer. Somit schlägt die Validierung fehl und die createAction kann nicht aufgerufen werden, wenn ich das richtig sehe.

    Jetzt ist also die Frage, was passiert bei der Validierung? Oder Falls das Problem noch früher auftritt, warum wird der Wert aus dem Upload Feld nicht an die Validierung übergeben?

    Würde mich freuen wenn jemand eine Idee oder einen Lösungsansatz mit mir teilen würde

    Mit besten Grüßen
    Rayphi

  • rayphi rayphi
    Padawan
    0 x
    58 Beiträge
    0 Hilfreiche Beiträge
    08. 08. 2012, 12:13

    Also nun habe ich schon mal einen Weg gefunden, mit der ich die Validierung umgehen kann. Mit der Annotation @dontvalidate wird die Validierung verhindert. Ich vermute, dass auf Grund der noch nicht Implementierten Upload "Magie" auch noch keine Validierung für Uploads verfügbar ist, was dann dazu führt, dass Uploads auf eine nicht verfügbare Validierungsfunktion Validiert werden. Das wiederum führt wahrscheinlich zu dem Fehler.

    Da ein @dontvalidate meiner Meinung nach keine saubere Lösung ist, würde ich das Problem noch nicht als gelöst ansehen. Falls also jemand einen Saubere Lösung findet ist herzlich dazu eingeladen, eine Antwort zu schreiben ;) :p

    Da ich mich nun erst einmal um die Funktion meiner Extension kümmere, werde ich mich erst im nachhinein noch einmal mit diesem Problem beschäftigen und Falls ich eine Lösung finde diese hier ebenfalls dokumentieren ;)

    Mit besten Grüßen
    Rayphi

    Hier nochmal zum angucken: die @dontvalidate Annotation

    1. /**
    2.   * action create
    3.   *
    4.   * @param Tx_Atohtmlexport_Domain_Model_StaticHtmlExport $newStaticHtmlExport
    5.   * @dontvalidate $newStaticHtmlExport <--<--
    6.   * @return void
    7.   */
    8. public function createAction
    9. ...

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    09. 08. 2012, 21:44

    Alternativer Workaround wäre den Upload nicht direkt im Objekt zu übergeben sondern als zweites Actionargument. Dann kannst du probieren die Validierung am Controller zu annotieren, aber kann auch gerade nicht sagen ob das viel besser ist.

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • 1