php - vistas - pick phalcon
Anular el diseƱo en Phalcon (4)
He descubierto cómo hacer una anulación de vista en Phalcon con la ayuda de esto: https://stackoverflow.com/a/19941928/74651
El problema es que usa este método para el diseño, pero si el directorio no existe en el viewpath original, ingresa en este método.
¿Dónde comprueba phalcon el directorio para el diseño y cómo anularlo?
Consulte este marco: https://github.com/alanbarber111/cloud-phalcon-skeleton
Le permite tener paquetes de diseño por sitio web con la capacidad de configurar un directorio "Fall back" y un directorio "override". Si nada más, eche un vistazo a la aplicación / código / Core / Model / App / Design.php y la aplicación / code / core / Model / View * para ver cómo hemos completado esto.
Entonces, podrías hacer tres cosas. Primero, cambie el directorio de diseño, segundo, simplemente configure el diseño, o tercero, cambie ambos :)
$view->setLayoutsDir(''custom/layouts/'');
$view->setLayout(''outrageouslyCustomLayout'');
Ver todos los métodos en la documentación . Si recuerdo correctamente, las rutas deben ser relativas a su directorio de vistas.
La vista estándar ofrece varias maneras de controlar su representación, es posible que no necesite anular las cosas: http://docs.phalconphp.com/en/latest/reference/views.html#control-rendering- niveles
Usa esto en tu controlador ... funcionó para mí
public function initialize() {
parent::initialize();
$this->view->setTemplateAfter(''yourtemplate'');
}
Ok, acabo de descubrirlo después de algunas depuraciones ... no puedo volcar vars en clase de vista, lo cual es un poco molesto;)
Mi problema fue, de hecho, que el diseño debe ser relativo a la vista dir. Cuando anula el directorio de vista como en: https://.com/a/19941928/74651 , buscará el diseño en el directorio de vista original, no la anulación.
Es posible anular esto en _engineRender un poco molesto que fuerzan el directorio relativo y solo desencadenan y evento si un archivo no se ha encontrado muy flexible.
<?php
namespace Phapp/Mvc;
class View extends /Phalcon/Mvc/View {
/**
* @param array $engines
* @param string $viewPath
* @param boolean $silence
* @param boolean $mustClean
* @param /Phalcon/Cache/BackendInterface $cache
*/
protected function _engineRender($engines, $viewPath, $silence, $mustClean, $cache) {
// Layout override
if ($this->getCurrentRenderLevel() !== /Phalcon/Mvc/View::LEVEL_LAYOUT) {
return parent::_engineRender($engines, $viewPath, $silence, $mustClean, $cache);
}
foreach ($engines as $extension => $engine) {
if (!$engine instanceof View/Engine/ThemeInterface) {
continue;
}
$layout = $engine->getThemePath().$viewPath.$extension;
if (is_readable($layout)) {
$originalViewDir = $this->getViewsDir();
$this->setViewsDir($engine->getThemePath());
$content = parent::_engineRender($engines, $viewPath, $silence, $mustClean, $cache);
$this->setViewsDir($originalViewDir);
return $content;
}
}
}
}