como recivir datos POST

2,902 views
Skip to first unread message

cesar barcia

unread,
Mar 30, 2011, 4:39:34 PM3/30/11
to CodeIgniter-spanish
hOLA GENTE COMO LES VA?

tengo una pregunta que para muchos sera simple pero estoy empezando
con CI.. El tema es que tengo un form simple que manda datos de tipo
text por POST, cual es la manera de recivirlos en un modelo o en un
controlador?

supongamos que mande un dato de tipo text desde un form al controlador
llamado 'Uno' lo que estoy haciendo es esto:

class Uno extends CI_Controller{


function index(){

$dato['nombre'] = $_POST['nombre'];


}

}

por que el array DATO en el indice NOMBRE no toma el valor del POST?

estoy un poco perdido con eso les agradesco ayudas..

Isern Palaus

unread,
Mar 30, 2011, 4:48:21 PM3/30/11
to codeignit...@googlegroups.com
Hola,

Siempre podr�s acceder a los post con $_POST[] pero lo normal en
CodeIgniter es usar la librer�a Input:
http://codeigniter.com/user_guide/libraries/input.html

Entonces, usamos $this->input->post(); que una de las ventajas es que si
tenemos filtrado XSS por defecto, ya nos devolver� el valor filtrado y
la manera ser�a:

$variable = $this->input->post("example");

Siempre que el formulario sea tipo <input type="text" name="example" />

Sobre "de recivirlos en un modelo o en un controlador?", se hace igual
en ambos sitios.

Un saludo,
Isern Palaus
http://blog.ipalaus.es

El 30/03/2011 22:39, cesar barcia escribi�:

Carlos Mora

unread,
Apr 5, 2011, 7:25:02 AM4/5/11
to codeignit...@googlegroups.com
Isern,

> Sobre "de recivirlos en un modelo o en un controlador?", se hace igual
> en ambos sitios.

Ya que lo mensionas, siempre tuve la duda de que en el modelo no se
debería usar input, se supone que el modelo no sabe de donde viene la
info ¿O estoy meando fuera del tarro?

Isern Palaus

unread,
Apr 5, 2011, 7:48:11 AM4/5/11
to codeignit...@googlegroups.com
Hola Carlos,

Lo correcto, aunque despu�s cada uno tenemos nuestros m�todos, ser�a
procesar los post en el controlador y pasarlos ya formateados al modelo,
rollo:

// Controlador
$datos = array(
"nombre" => $this->input->post("title"),
"slug" => url_title($dats["nombre"]),
"fecha" => $this->input->post("date"), // aqu� podriamos
convertirlo a time, por ejemplo
// .. etc
);

$run = $this->example_model->insert($datos);

if(true === $run)
redirect("index");
else
$this->session->set_flashdata("error", "no funciona");

// Modelo
public function insert($datos = false)
{
if(false == is_array($datos) // Una comprobaci�n m�s no est�
return false; // de menos... ;-)

return $this->db->insert("tabla", $datos);
}


Pero vamos... esta es mi forma de hacerlo. Hay gente que prefiere
procesar los inputs en los modelos de modo que los controladores tienen
4 l�neas y as� son m�s "reutilizables"... en Google si buscas por "MVC
fat models" encontrar�s varias discusiones sobre el tema.

Espero que te sirva.

Un saludo,
Isern

El 05/04/11 13:25, Carlos Mora escribi�:


> Isern,
>
>> Sobre "de recivirlos en un modelo o en un controlador?", se hace igual
>> en ambos sitios.
> Ya que lo mensionas, siempre tuve la duda de que en el modelo no se

> deber�a usar input, se supone que el modelo no sabe de donde viene la


> info �O estoy meando fuera del tarro?
>

--
Isern Palaus <ipa...@ipalaus.es>

Juanmy

unread,
Apr 5, 2011, 8:06:42 AM4/5/11
to codeignit...@googlegroups.com
Yo también soy partidario de hacerlo de esta forma


El 05/04/2011 13:48, Isern Palaus escribió:
Hola Carlos,

Lo correcto, aunque después cada uno tenemos nuestros métodos, sería procesar los post en el controlador y pasarlos ya formateados al modelo, rollo:

// Controlador
$datos = array(
    "nombre" => $this->input->post("title"),
    "slug"   => url_title($dats["nombre"]),
    "fecha"  => $this->input->post("date"), // aquí podriamos convertirlo a time, por ejemplo
    // .. etc
);

$run = $this->example_model->insert($datos);

if(true === $run)
    redirect("index");
else
    $this->session->set_flashdata("error", "no funciona");

// Modelo
public function insert($datos = false)
{
    if(false == is_array($datos) // Una comprobación más no está
        return false;            // de menos... ;-)

    return $this->db->insert("tabla", $datos);
}


Pero vamos... esta es mi forma de hacerlo. Hay gente que prefiere procesar los inputs en los modelos de modo que los controladores tienen 4 líneas y así son más "reutilizables"... en Google si buscas por "MVC fat models" encontrarás varias discusiones sobre el tema.

Espero que te sirva.

Un saludo,
Isern

El 05/04/11 13:25, Carlos Mora escribió:
Isern,

Sobre "de recivirlos en un modelo o en un controlador?", se hace igual
en ambos sitios.
Ya que lo mensionas, siempre tuve la duda de que en el modelo no se
debería usar input, se supone que el modelo no sabe de donde viene la

Carlos Mora

unread,
Apr 5, 2011, 9:29:30 AM4/5/11
to codeignit...@googlegroups.com
Isern,

> Lo correcto, aunque después cada uno tenemos nuestros métodos, sería

> procesar los post en el controlador y pasarlos ya formateados al modelo,

Buscaba una opinión, soy de tu misma idea pero siempre me encuentro
con gente con otros gustos, y no le veo muchas ventajas.

Gracias

iMefisto

unread,
Apr 5, 2011, 11:27:35 AM4/5/11
to codeignit...@googlegroups.com
En una ocasión vi unos models usando inputs y la idea no me resultó para nada mala. En algún sistema lo adopté para tomar los datos por default.

En el controller del model hacía algo así:
...
$this->nombre = $this->input->post('nombre');
$this->direccion = $this->input->post('direccion');
...
etc

y en algún método tenía algo así:

function crear($data = null)
{
...
}


Entonces si después quería pasar los datos desde el controlador, usaba el método del model con argumento y si quería tomar los datos desde el post, usaba el método del model sin argumentos. "sale con fritas". De hecho, en la mayoría de los casos me encontré llamando al método sin argumentos, es decir, usando los inputs.

Supongo que el problema debe ser más evidente cuando hay un desarrollador encargado de los models y otro desarrollador encargado de los controladores.






--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

Reply all
Reply to author
Forward
0 new messages