2012-01-02 17 views
6

Necesito evitar que una vista se represente en un caso específico pero no puedo entender cómo evitar que se visualice.renderizar una vista en blanco en cakephp

me trataron

$this->autoRender=false 

pero no pasó nada, probablemente porque estoy usando un motor de renderizado del API que gestionan de forma diferente de los controladores regulares. ¿Alguien sabe algún truco para hacer esto?

Respuesta

0

sin saber nada de motor API que está utilizando, tal vez tratar de hacer de composición vacía de contenido vacío y llamarlo en el controlador como $this->layout = 'empty_layout'

4

intenta utilizar el diseño ajax $this->layout = 'ajax' esta es la composición vacía por defecto, que es usado para los métodos de Ajax

3

Mientras buscaba una solución, encontré esta respuesta. Ahora cuando se utiliza CakePHP 2.4.x, se puede utilizar el siguiente código en el controlador:

$this->layout = false; 

Esto conducirá a poco la vista que se queden sin un diseño.

11

El uso de $this->layout = 'ajax' no parece ser suficiente.

Pero el uso de estas dos líneas funciona:

$this->layout = 'ajax'; 
$this->render(false); 
2

Es una cuestión de edad. La versión actual de la torta es 3.x y hay una manera fácil de usar un diseño en blanco.

Sólo añadir el del controlador:

$this->viewBuilder()->autoLayout(false); 
+0

Aún intenta buscar un archivo de vista y me muestra 'Error: no se encontró la vista para ExampleController :: myAction() –

0

El método de CakePHP 3 autoLayout(false) de la otra respuesta todavía tendrá el sistema intentar localizar un archivo de vista/plantilla correspondiente a la acción que está llamando. Como no necesitaba ninguna salida, esto no funcionó para mí, así que también necesitaba renderizar una plantilla vacía.

Crear un archivo .ctp en blanco para cada acción vacía que pueda necesitar no es realmente una opción, porque normalmente desearía tener uno y volver a utilizarlo. CakePHP 2 tenía una propiedad $this->viewPath que le permitía configurar el controlador para buscar en la carpeta app/View, pero su alternativa de CakePHP 3 sigue buscando en las carpetas correspondientes de controlador y prefijo. Existe una forma no tan obvia de obligar a CakePHP3 a buscar una plantilla en una ruta de vista raíz.

  1. Crear src/Template/my_blank_view.ctp
  2. Añadir lo siguiente a la acción del controlador:

    $this->viewBuilder()->layout(false); 
    $this->viewBuilder()->templatePath('.'); // this 
    $this->viewBuilder()->template('my_blank_view'); 
    

Además, estoy usando $this->viewBuilder()->layout(false) en lugar de autoLayout(false) ya que este último tipo de implica que puede haber otro diseño establecido más adelante, donde el layout(false) establece explícitamente que no se necesita diseño.

2
public function function_without_layout(){ 
    $this->viewBuilder()->autoLayout(false); 
    echo "hello Brij"; 
    exit; 
} 

$this->layout = false; está obsoleto en la versión 3 de CakePHP.
Uso $this->viewBuilder()->autoLayout(false); para CakePHP versión 3.

2

Añadir esto a su controlador:

$this->autoRender = false; 

Esto funciona en mi proyecto.

Cuestiones relacionadas