it-swarm-es.com

¿Cómo debo manejar los elementos de formulario de contenedor?

He agregado algunos campos personalizados al formulario de registro de usuario y descubrí que se envían de vuelta, empaquetados en un elemento de formulario de tipo "contenedor". Mi código debe manejar todo tipo de campos de registro personalizados diferentes.

¿Cómo debería analizar estos objetos y extraer los campos de ellos? ¿Debería buscar en las matrices y qué puedo esperar encontrar allí?

Parece que no puedo encontrar ninguna buena documentación sobre estos objetos.

Editar:

Los campos regulares recibidos a través del registro de usuarios podrían verse así:

name
... (Array, 10 elements)
#type (String, 9 characters ) textfield
#title (String, 10 characters ) Username
#maxlength (Integer) 60
#required (Boolean) TRUE
#attributes (Array, 1 element)
class (Array, 1 element)
0 (String, 8 characters ) username
#default_value (String, 0 characters )
#access (Boolean) TRUE
#weight (Integer) -10
#fb_registration_field (String, 4 characters ) name

Un contenedor de formulario se ve p. Ej. Me gusta esto:

field_birtyday
... (Array, 6 elements)
#type (String, 9 characters ) container
#attributes (Array, 1 element)
#weight (String, 1 characters ) 7
#tree (Boolean) TRUE
#language (String, 3 characters ) und
und (Array, 13 elements)
0 (Array, 12 elements)
#entity_type (String, 4 characters ) user
#bundle (String, 4 characters ) user
#field_name (String, 14 characters ) field_birtyday
#language (String, 3 characters ) und
#field_parents (Array, 0 elements)
#columns (Array, 2 elements)
0 (String, 5 characters ) value
1 (String, 6 characters ) format
#title (String, 8 characters ) Birthday
#description (String, 0 characters )
#required (Boolean) FALSE
#delta (Integer) 0
#weight (Integer) 0
value (Array, 16 elements)
#entity_type (String, 4 characters ) user
#bundle (String, 4 characters ) user
#field_name (String, 14 characters ) field_birtyday
#language (String, 3 characters ) und
#field_parents (Array, 0 elements)
#columns (Array, 2 elements)
0 (String, 5 characters ) value
1 (String, 6 characters ) format
#title (String, 8 characters ) Birthday
#description (String, 0 characters )
#required (Boolean) FALSE
#delta (Integer) 0
#weight (Integer) 0
#type (String, 9 characters ) textfield
#default_value (NULL)
#size (String, 2 characters ) 60
#maxlength (String, 3 characters ) 255
#attributes (Array, 1 element)
#theme (String, 25 characters ) field_multiple_value_form | (Callback) field_multiple_value_form();
#field_name (String, 14 characters ) field_birtyday
#cardinality (String, 1 characters ) 1
#title (String, 8 characters ) Birthday
#required (Integer) 0
#description (String, 0 characters )
#prefix (String, 42 characters ) <div id="field-birtyday-add-more-wrapper">
#suffix (String, 6 characters ) </div>
#max_delta (Integer) 0
#after_build (Array, 1 element)
0 (String, 30 characters ) field_form_element_after_build | (Callback) field_form_element_after_build();
#language (String, 3 characters ) und
#field_parents (Array, 0 elements)
6
grm

Deberías usar $form_state['values'] para manejar los datos de usuario enviados, no $form.

4
sun

No hay buena documentación en ese formulario porque es dinámico, cualquier módulo puede implementar hook_form_alter () y ponerlo completamente al revés. En su ejemplo, user.module agrega el nombre directamente, mientras que field_birthday es un campo y los campos se crean de una manera que les permite mostrarse varias veces si es necesario. Es por eso que son un contenedor y solo dentro de ellos está el elemento de forma real.

Suponiendo que desea analizar el formulario real, y no la respuesta, debe pasar por el formulario de forma recursiva. La función element_children () puede ayudarlo con eso. Devuelve las teclas de todos los elementos del formulario debajo de la que pasó a esa función.

0
Berdir