El controlador es donde se instancia y configura Zend_View.
Después se asignan variables a la vista y se indica a la vista que
renderice la salida utilizando un script en particular.
El script del controlador debe asignar las variables necesarias a la vista antes de entregar el control al script de la vista. Normalmente, puede realizar las asignaciones una a una asignando a los nombres de propiedad de la instancia de la vista:
$view = new Zend_View(); $view->a = "Hay"; $view->b = "Bee"; $view->c = "Sea";
Sin embargo, esto puede resultar tedioso cuando ya ha recopilado los valores que se van a asignar en un array u objeto.
El método assign() le permite asignar desde un array u objeto "en bloque". Los siguientes ejemplos tienen el mismo efecto que las asignaciones de propiedades una a una anteriores.
$view = new Zend_View();
// assign an array of key-value pairs, where the
// key is the variable name, and the value is
// the assigned value.
$array = array(
'a' => "Hay",
'b' => "Bee",
'c' => "Sea",
);
$view->assign($array);
// do the same with an object's public properties;
// note how we cast it to an array when assigning.
$obj = new StdClass;
$obj->a = "Hay";
$obj->b = "Bee";
$obj->c = "Sea";
$view->assign((array) $obj);
Alternativamente, puede usar el método assign para asignar una a una pasando un nombre de variable como cadena, y después el valor de la variable.
$view = new Zend_View();
$view->assign('a', "Hay");
$view->assign('b', "Bee");
$view->assign('c', "Sea");
Una vez que ha asignado todas las variables necesarias, el controlador
debe indicar a Zend_View que renderice un script de vista
en particular. Hágalo llamando al método render(). Tenga en cuenta que el
método devolverá la vista renderizada, no la imprimirá, por lo que
deberá imprimirla o mostrarla usted mismo en el momento apropiado.
$view = new Zend_View();
$view->a = "Hay";
$view->b = "Bee";
$view->c = "Sea";
echo $view->render('someView.php');
Por defecto, Zend_View espera que sus scripts de vista sean
relativos al script que los llama. Por ejemplo, si su script de
controlador se encuentra en "/path/to/app/controllers" y llama a
$view->render('someView.php'), Zend_View buscará
"/path/to/app/controllers/someView.php".
Obviamente, sus scripts de vista probablemente estén ubicados en
otro lugar. Para indicar a Zend_View dónde debe buscar
los scripts de vista, utilice el método setScriptPath().
$view = new Zend_View();
$view->setScriptPath('/path/to/app/views');
Ahora, cuando llame a $view->render('someView.php'), buscará "/path/to/app/views/someView.php".
De hecho, puede "apilar" rutas usando el método addScriptPath().
A medida que agrega rutas a la pila, Zend_View buscará
en la ruta añadida más recientemente el script de vista solicitado.
Esto le permite sobrescribir vistas predeterminadas con vistas
personalizadas, de modo que pueda crear "temas" o "skins" personalizados
para algunas vistas, dejando otras intactas.
$view = new Zend_View();
$view->addScriptPath('/path/to/app/views');
$view->addScriptPath('/path/to/custom/');
// now when you call $view->render('booklist.php'), Zend_View will
// look first for "/path/to/custom/booklist.php", then for
// "/path/to/app/views/booklist.php", and finally in the current
// directory for "booklist.php".
![]() |
Nunca use la entrada del usuario para establecer rutas de scripts |
|---|---|
|
// $_GET['foo'] == '../../../etc'
$view->addScriptPath($_GET['foo']);
$view->render('passwd');
Aunque este ejemplo es artificial, muestra claramente el problema potencial. Si debe depender de la entrada del usuario para establecer la ruta de su script, filtre correctamente la entrada y compruebe que existe bajo rutas controladas por su aplicación. |
![[Note]](images/note.png)