L'aggiunta di un pulsante di invio in una tabella a tema non funziona

Aug 24 2020

Quando aggiungo un pulsante all'interno della chiave "#rows" di un elemento della tabella, la funzione di invio non viene chiamata.

class MyForm extends FormBase
{

   public function buildForm(array $form, FormStateInterface $form_state)
    {
        $my_button = [ '#type' => 'submit', '#value' => $this->t("Click"),
            '#submit' => [
                '::custom_submitForm'
            ]
        ];
        $form['my_table'] = [ // '#tree' => TRUE, '#theme' => 'table', '#header' => [ 'Column 1','Column 2' ], '#rows' => [ [$this->t("Blabla"), ['data'=>$my_button]] ], ]; return $form;
    }
    // other stuff

Qual è la soluzione migliore per questo?

MODIFICA PER AGGIUNGERE:

Come primo tentativo di capire cosa sta succedendo, ho permesso alla funzione dei bambini di considerare '#rows'come bambini (vedi Drupal\Core\Render\Element::children)

  public static function children(array &$elements, $sort = FALSE) {
     ...
    foreach ($elements as $key => $value) { if (is_int($key) || $key === '' || ($key[0] !== '#' || $key=='#rows')) {
     ...

Questo sta risolvendo il problema (viene chiamato il gestore), ma ovviamente questa modifica genera molti altri problemi .. Ma ora, possiamo capire perché il gestore di invio non è stato chiamato.

Ho aggiunto un problema nella coda drupal: https://www.drupal.org/project/drupal/issues/3166899

Non sto chiedendo di correggere questo bug, ma quale sarebbe la soluzione migliore.

Risposte

2 4k4 Aug 24 2020 at 18:51

Usa invece di #theme un elemento del form #type:

'#type' => 'table'

L'elemento del modulo della tabella ha un passaggio aggiuntivo per l'elaborazione quando viene utilizzato in un modulo.

Non hai bisogno '#rows'. Qualsiasi chiave di matrice che non inizia con #, anche l'indice aggiunto automaticamente aggiungendo una riga con [], è considerato un figlio visualizzabile e visualizzato come riga.