it-swarm-es.tech

Frontend: ¿por qué algunos campos no están en el parámetro $ data de la función guardar?

Estoy usando una interfaz JForm para manipular algunos datos. El formulario html es correcto, pero cuando se devuelve a la función de guardar modelo no recibo todos los datos.

Estos son los datos que save recibe a través de $data parámetro:

Array
(
    [created] => XXXXXXXXXXXXXXXXX
    [updated] => XXXXXXXXXXXXXXXXX
    [wasteId] => X
    [price] => XXXX
    [pricenight] => XXX
    [pricefreeday] => XXXX
    [pricefreedaynight] => XXXX
    [tags] => 
)

Pero cuando uso

$formData = new JRegistry($this->input->get('jform', '', 'array'));

o cuando obtuve los datos como lo hace el método de guardar JControllerForm

$formData = new JRegistry($this->input->post->get('jform', array(), 'array'));

Tengo

Joomla\Registry\Registry Object
(
    [data:protected] => stdClass Object
        (
            [wasteId] => X
            [price] => XXXX
            [pricenight] => XXX
            [pricefreeday] => XXXX
            [pricefreedaynight] => XXXX
            [contractId] => Array
                (
                    [0] => XX
                    [1] => XX
                )

            [created] => XXXXXXXXXXXXXXXXX
            [updated] => XXXXXXXXXXXXXXXXX
            [id] => XX
        )
)

Entonces los campos id y contractId faltan en el $data parámetro.

Alguna idea de lo que debo hacer para tener contractId e id en el $data parámetro del modelo save función?

Por cierto, el modelo que estoy usando se deriva de JModelAdmin y el controlador se deriva de JControllerForm. El controlador no tiene funciones anuladas que puedan afectar la forma en que recopila datos del formulario.

EDITAR

Más pistas: inspeccionando el JControllerForm::save más detalladamente he visto que $data tiene el componente id con el valor correcto pero se sobrescribe con un valor vacío alrededor de la línea 637 debido a esto:

$recordId = $this->input->getInt($urlVar); // around line 634 of JControllerForm

establece $recordId a un valor vacío, a pesar de $urlVar el valor es "id". Luego, alrededor de la línea 637 de JControllerForm $ data ["id"] se cambia:

$data[$key] = $recordId

$key el valor es "id" y $recordId esta vacio.

Gracias.

2
Pep Lainez

No muestra ninguno de sus códigos, así que voy a ver lo que sé de JControllerForm y JModelAdmin, que por supuesto se verán afectados por cualquier anulación en su subclase.

JControllerForm

El método save() en JControllerForm usa la siguiente línea para recuperar la matriz JForm.

$data  = $this->input->post->get('jform', array(), 'array');

Tenga en cuenta el segmento adicional ->post Frente a su prueba JRegistry(), eso significa que solo obtiene los datos de los datos post enviados. Su ejemplo utiliza la combinación JInput como fuente. Es poco probable, pero si esos campos se envían como parte de la URL del formulario (es decir, en la parte get del envío), no se encontrarán.

Sin más detalles, p. forma html, su controlador y código de modelo (especialmente si anula guardar/vincular, etc.) es difícil de decir. Si puede agregar más detalles, probablemente pueda ampliar mi respuesta.

2
Craig