在cakephp中呈现一个空白视图

时间:2012-01-02 12:39:19

标签: cakephp view

我需要阻止视图在指定的情况下呈现,但我无法理解如何防止它呈现。

我试过

$this->autoRender=false

但没有发生任何事情,可能是因为我使用的API引擎管理渲染与常规控制器不同。有人知道这样做的任何技巧吗?

8 个答案:

答案 0 :(得分:11)

使用$this->layout = 'ajax'似乎还不够。

但是使用这两条线可以起作用:

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

答案 1 :(得分:5)

在寻找解决方案时,我找到了答案。现在使用CakePHP 2.4.x时,您可以在控制器中使用以下代码:

$this->layout = false;

这将导致仅渲染视图,而没有布局。

答案 2 :(得分:4)

尝试使用ajax layout $this->layout = 'ajax'这是默认的空布局,用于ajax方法。

答案 3 :(得分:3)

这是一个老问题。目前的蛋糕版本是3.x,并且有一种简单的方法可以使用空白布局。

仅在控制器中添加:

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

答案 4 :(得分:2)

launch.json
CakePHP版本3中不推荐使用

public function function_without_layout(){ $this->viewBuilder()->autoLayout(false); echo "hello Brij"; exit; } 对CakePHP版本3使用$this->layout = false;

答案 5 :(得分:2)

在控制器中添加:

$this->autoRender = false;  

这适用于我的项目。

答案 6 :(得分:0)

在不了解您正在使用的API引擎的情况下,可能会尝试使用空内容制作空白布局,并将其作为$this->layout = 'empty_layout'

在控制器中调用

答案 7 :(得分:0)

另一个答案中的CakePHP 3 autoLayout(false)方法仍然会让系统尝试为您正在调用的操作找到相应的视图/模板文件。由于我根本不需要输出,这对我不起作用,所以我还需要渲染一个空模板。

为您可能需要的每个空操作创建一个空白.ctp文件实际上不是一个选项,因为您通常希望拥有一个并重复使用它。 CakePHP 2有一个$this->viewPath属性,可以让你配置控制器来查看app/View文件夹,但它的CakePHP 3替代版仍会查看相应的控制器和前缀文件夹。有一种不太明显的方法可以强制CakePHP3在根视图路径中查找模板。

  1. 创建src/Template/my_blank_view.ctp
  2. 将以下内容添加到控制器操作中:

    $this->viewBuilder()->layout(false);
    $this->viewBuilder()->templatePath('.'); // this
    $this->viewBuilder()->template('my_blank_view');
    
  3. 另外,我使用的是$this->viewBuilder()->layout(false)而不是autoLayout(false),因为后一种意味着稍后可能会设置另一个布局,layout(false)只是明确设置没有布局需要的。