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

$view->assign('var', 'contenido') en IndexController

Estas en el tema de $view->assign('var', 'contenido') en IndexController en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola no puedo asignar una variable al objeto $view dentro de IndexController, osea no es que no pueda sino que no la asigna. Lo raro ...
  #1 (permalink)  
Antiguo 14/02/2011, 20:04
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
$view->assign('var', 'contenido') en IndexController

Hola no puedo asignar una variable al objeto $view dentro de IndexController, osea no es que no pueda sino que no la asigna. Lo raro es que si lo hago desde Bootstrap.php, ahí si me asigna el contenido y luego lo vuelco en el layout.
Cual puede ser el problema?

NOTA. Ya probé de todo:
$view->var = contenido;
$view->assign('var', 'contenido');
$this->view->assign('var', 'contenido');
  #2 (permalink)  
Antiguo 14/02/2011, 22:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: $view->assign('var', 'contenido') en IndexController

¿Qué tienes en el $view?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 14/02/2011, 22:43
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 11 meses
Puntos: 7
Respuesta: $view->assign('var', 'contenido') en IndexController

no seria $this->view->var = 'tu contenido';

y en tu layout

echo $this->escape($this->var);
  #4 (permalink)  
Antiguo 15/02/2011, 02:19
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: $view->assign('var', 'contenido') en IndexController

Deberías mostrar el código del action y del view.

@alfcm esto:

Código PHP:
Ver original
  1. $this->view->var = 'tu contenido';

es lo mismo que esto:

Código PHP:
Ver original
  1. $this->view->assign('var', 'contenido');

assign se suele utililzar para pasar un array, algo asi:

Código PHP:
Ver original
  1. $data = array(
  2.     'param1' => $value1,
  3.     'param2' => $value2
  4.     'param3' => $value3
  5.     'param4' => $value4
  6. );
  7. $this->view->assign($data);

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 15/02/2011, 05:06
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: $view->assign('var', 'contenido') en IndexController

Exacto, es como dice master, por eso te pregunto que tienes en la variable $view porque dependiendo de lo que digas se te puede decir que corregir. Si colocas el codigo completo mejor de ese action.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 15/02/2011, 08:05
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: $view->assign('var', 'contenido') en IndexController

Cita:
Iniciado por alfcm Ver Mensaje
no seria $this->view->var = 'tu contenido';

y en tu layout

echo $this->escape($this->var);
No estoy usando el método escape(), directamente en el layout hago $this->var, es importante escaparar la variable?
  #7 (permalink)  
Antiguo 15/02/2011, 08:11
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: $view->assign('var', 'contenido') en IndexController

Si lo es, te dejo un enlace http://framework.zend.com/manual/en/...ripts.escaping, igual te comento que si no nos mostras el código, dificilmente te podamos ayudar.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 15/02/2011, 08:13
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: $view->assign('var', 'contenido') en IndexController

Cita:
Iniciado por abimaelrc Ver Mensaje
¿Qué tienes en el $view?
En la variable $view tengo el objeto Zend_View, sería lo mismo que $this->view.

Probé
Código PHP:
$view = new Zend_View();
$view->assign('var''cadena'); 
También
Código PHP:
$this->view->assign('var''cadena'); 
Pero a la hora de llamar la variable en el layout no existe. Como dije, si asigno la variable en el Bootstrap.php anda perfecto pero no se porque motivo desde el controlador no puedo crear la variable.
  #9 (permalink)  
Antiguo 15/02/2011, 08:49
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: $view->assign('var', 'contenido') en IndexController

Cita:
Iniciado por abimaelrc Ver Mensaje
Exacto, es como dice master, por eso te pregunto que tienes en la variable $view porque dependiendo de lo que digas se te puede decir que corregir. Si colocas el codigo completo mejor de ese action.
Dejo el código PARTE #1:

Bootstrap.php
Código PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function 
_initView()
    {
        
setlocale(LC_TIME'es_ES.UTF-8');
        
        
// Inicializar la vista
        
$view = new Zend_View();
        
$view->doctype('XHTML1_STRICT');
        
         
// setting the controller and action name as title segments:
        
$view->headTitle('SGContable');
        
        
$view    ->    headMeta()
                    ->    
appendHttpEquiv('Content-Type''text/html; charset=UTF-8')
                    ->    
appendHttpEquiv('Content-Language''es-AR');
                    
        
$view    ->    headMeta()
                    ->    
appendName('google-site-verification''BIiK77mwkJeGjib6uubYJIb8vjmP-8DJE59UebQodOM')
                    ->    
appendName('DC.Language''spanish', array('scheme' => 'RFC1766'))
                    ->    
appendName('AUTHOR''Yo')
                    ->    
appendName('REPLY-TO''[email protected]')
                    ->    
appendName('DESCRIPTION''Descripción.')
                    ->    
appendName('KEYWORDS''keywords')
                    ->    
appendName('Resource-Type''document')
                    ->    
appendName('Revisit-After''1 days')
                    ->    
appendName('Robots''all')
                    ->    
appendName('google-site-verification''xxxx');
        
        
$view    ->    headLink()
                    ->    
headLink(array(
                                
'href' => 'imgs/favicon.ico'
                                
'rel' => 'shortcut icon'
                                
'type' => 'image/x-icon'
                            
))
                    ->    
headLink(array(
                                
'href' => 'mailto:[email protected]'
                                
'rev' => 'made'
                            
));
                            

        
$view->addHelperPath('ZendX/JQuery/View/Helper/''ZendX_JQuery_View_Helper');
        
$view->headScript()->appendScript($script);
        
$view->headScript()->appendScript('var IE7_PNG_SUFFIX = ".png";''text/javascript', array('conditional' => 'lt IE 9'));
        
$view->headScript()->appendFile('js/IE9.js''text/javascript', array('conditional' => 'lt IE 9'));
        
        
// Añadir al ViewRenderer
        
$viewRenderer Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
        
$viewRenderer->setView($view);
        
        
// Retorno, de modo que pueda ser almacenada en el arranque (bootstrap)
        
return $view;
    }

IndexController.php
Código PHP:
class IndexController extends Zend_Controller_Action
{
    public function 
init()
    {
        
/* Initialize action controller here */
        
$view $this->initView();
        
$view->headTitle('Inicio');
        
$view->headTitle()->setSeparator(' / ');
    }
    
    public function 
indexAction()
    {
        
// action body
        
$view $this->initView();
        
$view->setEscape('htmlentities');
        
$view->assign('mensaje''FUCKING MESSAGE!!!');
    }
    
    public function 
initView()
    {
        if (
Zend_Registry::isRegistered('view')) {
            
$this->view Zend_Registry::get('view');
        } else {
            
$this->view = new Zend_View();
        }
        
        return 
$this->view;
    }

layout.phtml
Código:
<?php echo $this->doctype(); ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<?php
	echo $this->headTitle().PHP_EOL;
	echo $this->headMeta().PHP_EOL;
	echo $this->headLink().PHP_EOL;
	$this->jQuery()
		->setCdnSsl($_SERVER['HTTPS'])
		->enable()
		->setVersion('1')
		->uiEnable()
		->setUiVersion('1');
	echo $this->jQuery().PHP_EOL;
	echo $this->headScript().PHP_EOL;
	?>
</head>
<body>
	<?php echo $this->layout()->content; ?>
	<?php echo $this->escape($this->mensaje); ?>	
</body>
</html>
  #10 (permalink)  
Antiguo 15/02/2011, 11:11
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: $view->assign('var', 'contenido') en IndexController

SOLUCIONADOOOO!!!!
Lo que hice fue mover el método initView() de IndexController al Bootstrap.
Alguien me podría explicar el por qué de esto, ya que no me doy cuenta donde está el conflicto.
  #11 (permalink)  
Antiguo 15/02/2011, 12:15
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: $view->assign('var', 'contenido') en IndexController

El problema es que estas sobreescribiendo Zend_Controller_Action::initView y tu implementación de initView siempre devuelve una nueva vista(nunca la seteas al Registry), que no esta asociada al viewRenderer.
Te comento que para acceder a la vista desde un controller lo único que tenes que hacer es $this->view, tu controller deberia ser algo asi:

Código PHP:
Ver original
  1. public function init()
  2. {
  3.     $this->view->headTitle('Inicio');
  4.     $this->view->headTitle()->setSeparator(' / ');
  5. }
  6.      
  7. public function indexAction()
  8. {
  9.     $this->view->setEscape('htmlentities');
  10.     $this->view->assign('mensaje', 'Zend Rulz!!!');
  11. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 15/02/2011, 14:17
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: $view->assign('var', 'contenido') en IndexController

Ah! Entiendo... Gracias muchas gracias!

Etiquetas: contenido
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 15:29.