我需要阻止视图在指定的情况下呈现,但我无法理解如何防止它呈现。
我试过
$this->autoRender=false
但没有发生任何事情,可能是因为我使用的API引擎管理渲染与常规控制器不同。有人知道这样做的任何技巧吗?
答案 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在根视图路径中查找模板。
src/Template/my_blank_view.ctp
将以下内容添加到控制器操作中:
$this->viewBuilder()->layout(false);
$this->viewBuilder()->templatePath('.'); // this
$this->viewBuilder()->template('my_blank_view');
另外,我使用的是$this->viewBuilder()->layout(false)
而不是autoLayout(false)
,因为后一种意味着稍后可能会设置另一个布局,layout(false)
只是明确设置没有布局需要的。