[Frage] Typo3 6.2 @validate not working Problem 2 TYPO3-Version: 6.2.7

  • ironpfu ironpfu
    R2-D2
    0 x
    99 Beiträge
    1 Hilfreiche Beiträge
    10. 04. 2015, 11:26

    Hallo,
    bzugnehmend auf mein Post vom 09.04:"Typo3 6.2 @validate not working"
    scheitere ich nun leider am nächsten Validator:
    Im Model:

    1. /**
    2. * picture
    3. *
    4. * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
    5.   * @validate PCON\Hbm\Domain\Validator\PictureValidator
    6.   * @validate NotEmpty
    7.   *
    8. */
    9. protected $picture;

    im Validator:

    1. namespace PCON\Hbm\Domain\Validator;
    2.  
    3. class PictureValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {
    4.  
    5.  
    6. public function isValid($value) {
    7.  
    8.  
    9. \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($value);
    10. }
    11. }

    Der Validator wird nie ausgeführt.
    Komisch ist jedoch das der NotEmpty Validator von Extbase ausgeführt wird.
    Kann mit jemand weiterhelfen?


  • 1
  • ironpfu ironpfu
    R2-D2
    0 x
    99 Beiträge
    1 Hilfreiche Beiträge
    10. 04. 2015, 19:21

    Hi ich bin ein wenig weitergekommen.
    Mein Denkfehler war, dass ich die FileReference validiere, welche in diesem Fall ja immer NULL ist...
    Ich möchte jedoch den FileUpload validieren.
    Folgende steht nun im Controller:

    1. protected function initializeActionMethodValidators() {
    2. parent::initializeActionMethodValidators();
    3.  
    4. if ($this->actionMethodName == 'newAction' || $this->actionMethodName == 'editAction') {
    5. $this->controllerContext = $this->buildControllerContext();
    6. // Validate File Upload
    7. $validator = $this->objectManager->create('PCON\Hbm\Domain\Validator\PictureValidator');
    8. $error = $validator->validate($_FILES['tx_hbm_search'])->getErrors();
    9.  
    10. /* Set Form Errors manually - get results from property mapper and add new errors */
    11. $result = $this->getControllerContext()->getRequest()->getOriginalRequestMappingResults();
    12. foreach ($error as $key => $value) {
    13. //$result->addError($value);
    14. $result->forProperty('picture')->addError($value);
    15. }
    16. //\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($result);
    17. $this->getControllerContext()->getRequest()->setOriginalRequestMappingResults($result);
    18. }
    19.  
    20. }

    und hier die Validator Klasse:

    1. /**
    2.  * The Validator for Image Fields
    3.  * Usage: @validate PCON\Hbm\Domain\Validator\IsImageValidator
    4.  *
    5.  */
    6. class PictureValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {
    7.  
    8. protected $acceptsEmptyValues = TRUE;
    9. /**
    10.   * Checks if the property is a FileReference
    11.   *
    12.   * If at least one error occurred, the result is FALSE.
    13.   *
    14.   * @param mixed $value The value that should be validated
    15.   * @return boolean TRUE if the value is valid, FALSE if an error occured
    16.   */
    17. public function isValid($value) {
    18.  
    19. if ($value['name']['picture'] === NULL || $value['name']['picture'] === '') {
    20. $this->addError(
    21. $this->translateErrorMessage(
    22. 'picture.null',
    23. 'ubm'
    24. ), 1262341473);
    25. return FALSE;
    26. }
    27. else
    28. {
    29. $fileType = '';
    30. switch ($value['type']['picture']) {
    31. case "image/gif":
    32. $fileType ='gif';
    33. break;
    34. case "image/jpeg":
    35. $fileType ='jpeg';
    36. break;
    37. case "image/jpg":
    38. $fileType ='jpg';
    39. break;
    40. case "image/png":
    41. $fileType ='png';
    42. break;
    43. case "image/bmp":
    44. $fileType ='bmp';
    45. break;
    46. }
    47.  
    48. $allowedFileTypes = explode(',', $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']);
    49. if (!in_array($fileType, $allowedFileTypes)) {
    50. $this->addError(
    51. $this->translateErrorMessage(
    52. 'picture.filetype',
    53. 'ubm'
    54. ), 1262341475);
    55. return FALSE;
    56. }
    57. }
    58. return TRUE;
    59. }
    60.  
    61. }

    Die Validierung läuft und es kommen auch entsprechende Error Message ...
    Einziger ENTSCHEIDENDER Schönheitsfehler:
    Die Argumente werden an die CreateAction weitergegeben und gespeichert.
    Kann mir jemand weiterhelfen?

  • Fox1990 Fox1990
    T3PO
    0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    24. 07. 2015, 11:47

    Hi,

    ich glaube ich habe gerade das gleiche Problem wie du und zwar möchte ich auch einen FileUpload validieren (http://stackoverflow.com/questions/31597749/how-can-i-validate-a-file-upload-field-in-typo3), wie du schon geschrieben hast, bringt die Anwendung von @validate Annotationen auf die FileReference recht wenig, da diese initial immer null ist.

    Nun bin ich auf deinen Beitrag gestoßen und habe gesehen das du die Validierung durch die Funktion initializeActionMethodValidators manuell an die property gebunden hast. Also habe ich diese Funktion auch in meinem Controller eingebaut, allerdings werden bei mir keine Fehlermeldungen ausgegeben, aber wenn ich das $result debugge sehe ich das die Fehlermeldung innerhalb des $results gesetzt ist, aber dennoch wird der Formular submit ausgeführt und ich erhalte die Meldung:

    [b]Exception while property mapping at property path "":PHP Catchable Fatal Error: Argument 1 passed to Fox\Example\Domain\Model\Data::setImage() must be an instance of TYPO3\CMS\Extbase\Domain\Model\FileReference, null given...[/b]

    Hast du auch dieses Problem?

  • ironpfu ironpfu
    R2-D2
    0 x
    99 Beiträge
    1 Hilfreiche Beiträge
    18. 08. 2015, 14:59

    Hi

    ich habe es bei meinem alten Projekt mittels JS und Clientseitig gelöst.
    Mittlerweile verwende ich die Methode von Helmut Hummel:
    https://github.com/helhum/upload_example

    LG Jürgen

  • 1