Ankündigung

Einklappen
Keine Ankündigung bisher.

Form Collection Type Exception Expected argument of type "string", "array" given.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Symfony] Form Collection Type Exception Expected argument of type "string", "array" given.

    Hallo,

    ich habe ein Formular mit einer Collection von hidden Fields:

    Model
    PHP-Code:
    // Article.php
    ...
       public function 
    setListImageStringBase64(string $string) {
            
    $this->listImageStringBase64[] = $string;
        }

        public function 
    getListImageStringBase64() {
            return 
    $this->listImageStringBase64;
        }
    ... 
    FormType
    PHP-Code:
    //ArticleType.php
    ...
    ->
    add('listImageStringBase64'CollectionType::class, [
                    
    'label' => false,
                    
    'entry_type' => HiddenType::class,
                    
    'constraints' => [
                        new 
    Assert\Count([
                            
    'min' => 1,
                            
    'minMessage' => '>>Bilder<< mindestens 1 Bild erforderlich (BILDER)',
                        ]),
                    ],
                ])
    ... 
    Das erzeugt das erwartete HTML:
    HTML-Code:
    <div id="article_editor_listImageStringBase64">
       <input type="hidden" id="article_editor_listImageStringBase64_0" name="article_editor[listImageStringBase64][0]">
       <input type="hidden" id="article_editor_listImageStringBase64_1" name="article_editor[listImageStringBase64][1]">
       <input type="hidden" id="article_editor_listImageStringBase64_2" name="article_editor[listImageStringBase64][2]">
       <input type="hidden" id="article_editor_listImageStringBase64_3" name="article_editor[listImageStringBase64][3]">
       ...
    </div>
    Nach dem Upload wirft die Methode $form->handleRequest() eine Exception
    HTML-Code:
    InvalidArgumentException   HTTP 500 Internal Server Error
    Expected argument of type "string", "array" given.
    getListImageStringBase64() gibt natürlich ein Array zurück... Wie muss die Collection richtig eingesetzt werden?

  • #2
    Mit der Umbenennung der Methoden im Model, geht es auf einmal. Warum? Bleibt mir schleierhaft, logisch und intuitiv geht nach meinem Verständnis anders...
    PHP-Code:
    // Model
    ...
    public function 
    addImageBase64(string $string) {
            
    $this->imagesBase64[] = $string;
        }

        public function 
    getImagesBase64() {
            return 
    $this->imagesBase64;
        }
    ...

    // FormType
    $builder
                
    ->add('imagesBase64'CollectionType::class, [
                    
    'label' => false,
                    
    'entry_type' => HiddenType::class,
                    ....
                ]) 
    Symfony ist echt eine Herrausforderung, speziell das Formhandling...

    Kommentar


    • #3
      Mit set wird der Wert überschrieben/gesetzt, mit add wird ein Wert hinzugefügt. Das ist eine Namenskonvention die in der Dokumentation erklärt wird und basiert auf der Empfehlung für die Benennung von getter/setter von Doctrine.

      Kommentar

      Lädt...
      X