vistas pick php layout view phalcon

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.


Aquí y más o menos aquí .

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; } } } }