drupal 8 – No se pueden manejar múltiples iteraciones de la misma forma en una página

Pregunta:

Estoy diseñando un sitio que tiene una variedad de puntos en los que necesito renderizar botones de "flujo de trabajo" que se utilizan para enviar acciones a una aplicación externa.

Usé la API de formulario para generar estos botones, y estoy usando la opción #submit => en mis botones para dirigir tipos de botones específicos a funciones personalizadas. También estoy usando campos ocultos para albergar datos que utilizo para facilitar la acción.

El problema que tengo es que estos botones pueden y deben aparecer varias veces por página, para diferentes aspectos de la aplicación, y cada vez que hago clic en uno de los botones, Drupal intenta enviar todos los formularios.

Supongo que lo que estoy preguntando es cómo puedo tener varias instancias del mismo formulario en la pantalla en un momento dado y saber con certeza que los botones de envío solo activarán acciones para la instancia específica del formulario al que pertenecen ?

¡¡gracias de antemano!!

Editar

Así que aquí está el meollo del problema: parece que getFormId debe devolver un valor único, pero no puedo averiguar cómo pasarle valores únicos.

Respuesta:

Sí, cada formulario debe tener un ID de formulario único. Consulte https://www.drupal.org/node/766146 y los comentarios allí.

Debe encontrar algo que identifique de forma única cada formulario y ponerlo en el ID del formulario.
Como se comentó allí, eso puede ser un poco complicado ya que getFormId() se llama muy temprano, por lo que debe crear una instancia del objeto de formulario usted mismo y pasarlo al generador de formularios.

Vea FormBuilder :: getFormId () para saber qué sucede cuando pasa una cadena, se pasa a $this->classResolver->getInstanceFromDefinition($form_arg); , que crea el objeto y usa el método create () si está disponible, puede usarlo o simplemente hacerlo usted mismo con un nuevo Object (), luego pasarlo a getForm () en su lugar.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım