Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Como mandar objetos de un controlador a un vista

Estas en el tema de Como mandar objetos de un controlador a un vista en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Estoy tratando de crear una aplicacion MVC con PHP. Mi problema es el siguiente: Tengo por ejemplo una clase view (login.php) que llama a ...
  #1 (permalink)  
Antiguo 02/02/2011, 08:47
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 11 meses
Puntos: 0
Como mandar objetos de un controlador a un vista

Hola

Estoy tratando de crear una aplicacion MVC con PHP. Mi problema es el siguiente: Tengo por ejemplo una clase view (login.php) que llama a una clase controladora (authentication.php). Lo que quiero es que la clase controladora sea capaz de:

1. Si el usuario es valido: Redireccionarme a otra pagina.
2. De lo contrario: Mostrarme el login nuevamente. Para esto quiero mandarle al view, varias cosas: un objeto, un mensaje, etc.

El 1 es facil, el punto 2, es mi problema, como hago para enviarle esos datos al view desde la controladora. Se que hay varios frameworks que hacen eso pero quiero hacerlo sin framework alguno.

Gracias de antemano.
  #2 (permalink)  
Antiguo 02/02/2011, 09:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Como mandar objetos de un controlador a un vista

Pues sin ver el código que usas es tan simple como asignar el objeto a una variable y rescatarlo en la vista, como bien dices hay varios Frameworks pero cada uno tiene una implementación concreta de una vista y puede ser tan simple o compleja como quieras, por ejemplo esto sería algo muy simple:
Código PHP:
Ver original
  1. <?php
  2. class IndexController {
  3.         public function loginAction(){
  4.                   $object = new ResponseObject();
  5.                   $message = "fallo";
  6.  
  7.                   include('login.template.php');
  8.         }
  9. }
  10. ?>
  11. // login.template.php
  12. El resultado es:
  13. <pre>
  14. <?php
  15. echo $object->foo();
  16. echo $message;
  17. ?>
  18. </pre>

Saludos.
  #3 (permalink)  
Antiguo 02/02/2011, 09:21
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 11 meses
Puntos: 0
Respuesta: Como mandar objetos de un controlador a un vista

Hola GatorV

Si, pero esa solucion haria que en el browser aparezca la direccion del archivo de la clase controladora, y lo que quisiera seria que solo se muestren en el browser las direcciones de las vistas.

Quisiera algo asi... (variable $repeat)

Clase controladora
Código PHP:
<?php
class HelloWorldController extends Controller {
    function 
printIt() {
        
$this->message 'Hello World';
        
$this->repeat 10;
        return 
$this->ok('the-view');
    } 
}
?>
Clase View
Código PHP:
<html>
    <head><title>Hello World View</title></head>
    <body>
        <?php for($i 0$i $repeat$i++): ?>
            <?php echo $message'<br />'?>
        <?php endfor; ?>        
    </body>
</html>
  #4 (permalink)  
Antiguo 02/02/2011, 10:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Como mandar objetos de un controlador a un vista

Es lo que te digo, tu ahí tienes una implementación muy particular de lo que estas haciendo, así que debes tu mismo diseñar el mecanismo para asignar las variables desde tu controlador a la vista, Zend usa un objeto View con el que lo puedes asignar, $this->view->foo = $foo; y estas son transportadas a la vista, por el mismo objeto View.

Debido que tu no quieres utilizar un Framework debes tu de programar esto, crear un objeto que te haga el render de tus vistas y puedas asignarle variables.

Etiquetas: controlador, mandar, objetos, vistas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:58.