# Passing an object to the view in CodeIgniter

I'm trying to use an object and persist it into the data base.

I created a class in the library's folder.

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

class Solicitud {

private $categoria; private$consecutivo;
private $id; private$mensaje;
private $solicitante; function __construct(){$this->categoria = 1;
$this->consecutivo = 1;$this->mensaje = "Mensaje por defecto";
}

public function escalarSolicitud( User $actual, User$nuevo){
$this->setSolicitante($nuevo);
}

# Getters and Setters

public function setCategoria( $categoria ){$this->categoria = $categoria; } public function getCategoria(){ return$this->categoria;
}


Here is the Controller:

<?php

if (!defined('BASEPATH')) exit('No direct script access allowed');

function __construct(){
parent::__construct();
}

public function crearSolicitud(){

$session_data =$this->session->userdata('session_user');
$usuario =$session_data['usuario'];
$categoria =$this->input->post('category');
$mensaje =$this->input->post('description');

$solicitud = new solicitud;$solicitud->setSolicitante($user);$solicitud->setCategoria($categoria);$solicitud->setMensaje($mensaje);$this->helpdesk_model->createSupport( $solicitud ); }  And in the Model how can I use the object properties: public function createSupport($soporte ){

$this->db->trans_start();$data = array(
'id' => null,
'id_user' => $soporte[usuario], ??? 'id_category' =>$soporte[categoria], ???
'message' => $soporte[mensaje] ??? );$this->db->insert('supports', $data);$this->db->trans_complete();

return $this->db->trans_status(); }  I need to know if I'm in the right direction or if the use of the 'Solicitud' class is not necessary. If I'm right, how should I call in the model the object attributes? • I realized that int the model I can use the get functions like 'id_category' =>$soporte->getCategoria(); Feb 5, 2014 at 14:51
• yep in your case since you don't modify anything with the data i would pass them just as an array Apr 7, 2014 at 12:04

I would like to add something to @Dukeatcoding comment in the question. What is the point of passing the whole object? Thinking on it as a part of the main controller, you should only pass the data as an array to the model:

$data = array( 'id_user' =>$usuario,
'id_category' => $soporte->getCategoria 'message' =>$soporte->getMensaje
)
$this->helpdesk_model->createSupport($solicitud );


Although, as you are getting all these properties so often, what about a general getter in your soporte class?

public function getValue( $var ){ return$this->{$var}; }  And you'd have something like: $data = array(
'id_user'     => $soporte->getVar( 'usuario'), 'id_category' =>$soporte->getVar( 'categoria'),
'message'     => $soporte->getVar( 'mensaje' ) )  From your code, I would take care of the validation of your values, as it looks like you don't validate if they're numeric, if they exists on your DDBB, etc. Maybe you're doing it, because I suppose the code you posted is just a excerpt (due to some method are missed in Solicitud, as setSolicitante($nuevo) ), but I prefer to write it, just in case.

Also, I won't assign to a var the values you take directly, just call them an take the value:

//Instead of:
$session_data =$this->session->userdata('session_user');
$usuario =$session_data['usuario'];
// Better
$usuario =$this->session->userdata('session_user');


Off topic, you could check Doctrine, http://www.doctrine-project.org/projects/orm.html, is an ORM that maybe could help you, and it has its own CI recipe: http://docs.doctrine-project.org/en/2.0.x/cookbook/integrating-with-codeigniter.html

Have fun!