entendiendo MVC

13 views
Skip to first unread message

diego

unread,
Nov 24, 2010, 12:07:51 PM11/24/10
to php...@googlegroups.com
Estimados, me estoy adentrando un poco en MVC
tengo una pregunta conceptual.

tengo un pequeño script para detectar el subdominio actual
donde deberia incluirlo, en el modelo o en el controlador??

gracias!

diego

Ezequiel Gonzalez Rial

unread,
Nov 24, 2010, 12:12:11 PM11/24/10
to php...@googlegroups.com
Como vas a hacer la detección cuando estás procesando el request, debe ser en el controlador.
Ezequiel


--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a php-arg+u...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/php-arg?hl=es.

Federico

unread,
Nov 24, 2010, 12:26:03 PM11/24/10
to php...@googlegroups.com
Y si lo necesitas hacer para todos los controladores, seguro podes
crearte un controller base y hacer que los demas controllers extiendan
el controller base.

Tambien depende el framework. Kohana tiene algo que se llama hooks.
Los hooks se ejecutan antes que los controllers. Es un buen lugar para
detectar un subdominio o para checkear seciones.

2010/11/24 Ezequiel Gonzalez Rial <gon...@gmail.com>:

diego

unread,
Nov 24, 2010, 12:47:49 PM11/24/10
to php...@googlegroups.com
estoy con codeigniter, aparentemente solo lo usare en un controlador
el subdominio es el nombre del usuario asi que deberia de pasarle ese nombre de usuario
al modelo para levantar todo no?

gracias!!

Ricardo Luis Mender

unread,
Nov 24, 2010, 12:50:24 PM11/24/10
to php...@googlegroups.com
También podría ser un Helper o Ayudante.
Saludos

Ricardo Luis Mender

diego

unread,
Nov 24, 2010, 5:18:38 PM11/24/10
to php...@googlegroups.com
estimados.
como paso desde el controlador una variable al modelo?

Mariano Garcia Berrotarán

unread,
Nov 24, 2010, 8:10:55 PM11/24/10
to php...@googlegroups.com
2010/11/24 diego <dieg...@gmail.com>:

> estimados.
> como paso desde el controlador una variable al modelo?
>

en el controller:

$data = array("nombre" => "Roberto Motochorro");
$this->load->view("perfil", $data);


y en el view:

<h1>Hola <?= $nombre ?></h1>

Guido

unread,
Nov 24, 2010, 8:16:20 PM11/24/10
to Grupo PHP Argentina
Mariano, así se pasan vars al view, él pregunto al model.

Para pasar una var al model es así:

$this->load->model('Model_name');

$this->Model_name->function($data);

Mariano Garcia Berrotarán

unread,
Nov 24, 2010, 8:17:42 PM11/24/10
to php...@googlegroups.com
2010/11/24 Guido <guido...@gmail.com>:

> Mariano, así se pasan vars al view, él pregunto al model.

wee, que distracción.

diego

unread,
Nov 24, 2010, 10:18:36 PM11/24/10
to php...@googlegroups.com
y si se lo tengo que pasar al constructor del modelo???

diego

unread,
Nov 24, 2010, 10:54:08 PM11/24/10
to php...@googlegroups.com
no consigo pasarle un parametro al modelo grrrrrrrr

dashboard.php
<?php

class Dashboard extends Controller {

    function Dashboard($subdomain)
    {
        parent::Controller();
       
        list($subdomain) = explode('.', $_SERVER['HTTP_HOST'], 2);

        $this->load->model('Dashboard_model');
        $this->Dashboard_model->Dashboard($subdomain);
    }

    function index()
    {
        $this->load->view('dashboard');
    }
}

dashboard_model.php

<?php

class Dashboard_model extends Model {

    function Dashboard_model($subdomain)
    {
        parent::Model();
        $query = $this->db->get_where('users', array('subdomain'=> $subdomain));
        return $query;
    }
   
}

donde le estoy pifiando??
saludos!

Guido

unread,
Nov 24, 2010, 11:03:11 PM11/24/10
to Grupo PHP Argentina
Hasta donde yo se, no le podes pasar un argumento al controller...por
que no se lo pasas a una función del model que no sea el controller?

Fijate que en este tutorial de nettuts hacen algo similar a lo que
creo que vos querés hacer...
http://net.tutsplus.com/tutorials/php/basecamp-style-subdomains-with-codeigniter/

Guido

unread,
Nov 24, 2010, 11:05:23 PM11/24/10
to Grupo PHP Argentina
perdón, quise decir "Hasta donde yo se, no le podes pasar un argumento
al CONSTRUCTOR"

diego

unread,
Nov 25, 2010, 7:27:18 AM11/25/10
to php...@googlegroups.com
correcto, de ahi me base, pero los datos de la base los saca en el controlador y yo quiero sacarlos del modelo
de hecho eso le dio origen a este thread

entonces la idea es detectar el subdominio en el controlador y pasarselo al modelo para luego asi obtener los datos y pasarselos a la vista

otra cosa que descubri es que modelos y controladores no pueden tener el mismo nombre (me llevo un buen rato)

gracias por el aporte!

El 25 de noviembre de 2010 01:05, Guido <guido...@gmail.com> escribió:
perdón, quise decir "Hasta donde yo se, no le podes pasar un argumento
al CONSTRUCTOR"

Ricardo Luis Mender

unread,
Nov 25, 2010, 8:37:16 AM11/25/10
to php...@googlegroups.com
No usé mucho Codeigniter, pero quizás si haces el helper, a este lo podes acceder desde cualquier lugar del controller.
Entonces el helper haría el proceso de detectar el subdominio y te lo retornaria, y listo lo tenes.

Saludos!

Ricardo Luis Mender

Federico

unread,
Nov 25, 2010, 10:28:42 AM11/25/10
to php...@googlegroups.com
No es por mete pua pero...... por eso prefiero Kohana!! Es mas flexible.

En Kohana directamente haces:

$user = new User_Model($data);

O, si usas ORM podes hacer:

$user = ORM::factory('user', $data); // donde $data es el primary key
de la tabla.


Saludos!

2010/11/25 Ricardo Luis Mender <ricu...@gmail.com>:

Guido

unread,
Nov 25, 2010, 11:08:21 AM11/25/10
to Grupo PHP Argentina
Diego, pero no hace falta que a eso se lo pases al constructor del
modelo, por que no se lo pasas a otra función? así debería ser...

diego

unread,
Nov 25, 2010, 1:33:56 PM11/25/10
to php...@googlegroups.com
el nombre codeigniter me parece mas fachero que kohana...  (y tambien me gusta el logo)

diego

unread,
Nov 25, 2010, 1:34:52 PM11/25/10
to php...@googlegroups.com
pero el constructor del modelo es el que se encarga de hacerl a consulta al a base, no debo pasarle el subdominio al constructor entonces???

2010/11/25 Guido <guido...@gmail.com>
Diego, pero no hace falta que a eso se lo pases al constructor del
modelo, por que no se lo pasas a otra función? así debería ser...

--

Guido

unread,
Nov 25, 2010, 2:02:50 PM11/25/10
to Grupo PHP Argentina
Digo que deberías hacer algo como:

*dashboard_model.php*

<?php

class Dashboard_model extends Model {

function Dashboard_model($subdomain)
{
parent::Model();
}

function get_subdomain($subdomain)
{
$query = $this->db->get_where('users', array('subdomain'=>
$subdomain));
return $query;
}

}



Y después en el controller si vas a poder hacer:

$this->load->model('Dashboard_model');
$this->Dashboard_model->get_subdomain($subdomain);

Federico

unread,
Nov 25, 2010, 2:18:36 PM11/25/10
to php...@googlegroups.com
No podes hacer un metodo que te devuelva una instancia del mismo objecto?

Algo asi (puede no funcionar):

<?php

class Dashboard_model extends Model {

function Dashboard_model($subdomain)
{
parent::Model();
}

function get_subdomain($subdomain)
{
return new Dashboard_model($subdomain);
}

}


El tema es que tendrias dos instancias del mismo objeto....pero
bue....todo no se puede.

2010/11/25 Guido <guido...@gmail.com>:

diego

unread,
Nov 25, 2010, 7:38:16 PM11/25/10
to php...@googlegroups.com
gente, lo solucione con un helper como dijeron por ahi arriba, asi lo utilizo cuando sea necesario

el modelo quedó asi

<?php

class Dashboard_model extends Model {

    function Dashboard_model()
    {
        parent::Model();
    }
   
    function index()
    {
        $this->load->helper('subdomain');   

        $query = $this->db->get_where('users', array('subdomain'=> subdomain()));
        return $query;
    }
   
}


y el controlador quedo asi...

<?php

class Dashboard extends Controller {

    function Dashboard()
    {
        parent::Controller();

        $this->load->model('Dashboard_model');

    }

    function index()
    {
       
        if($this->Dashboard_model->index()->num_rows() < 1){
            echo 'no existe el usuario';
        } else {
            $user = $this->Dashboard_model->index()->row();
            $data['name'] = $user->name;
            $data['email'] = $user->email;
           
            $this->load->view('dashboard',$data);
        }
    }

}


que les parece? esta todo donde debe estar? porque andar anda ;)

lo que si... si necesito acceder a los datos de la base desde otra funcion dentro del controlador estoy frito no??
en ese caso deberia tener $user = $this->Dashboard_model->index()->row(); dentro del constructor no??

gracias por este curso intensivo!!

Ricardo Luis Mender

unread,
Nov 26, 2010, 2:08:21 AM11/26/10
to php...@googlegroups.com
Buenisimo Diego que hayas podido solucionar.

Hay que tener en cuenta que todo framework tiene su 'paquete' de helpers que son funciones asi como 'colgadas' que no tienen cabida ni en el modelo ni en el controller. Como por ejemplo helpers de limpieza de html o generadores de tags html.

Saludos.

Ricardo Luis Mender
Reply all
Reply to author
Forward
0 new messages