我需要防止视图在特定情况下呈现,但我无法理解如何防止呈现它。在cakephp中呈现空白视图
我试图
$this->autoRender=false
,但什么都没有发生,可能是因为我使用的管理从常规控制器呈现不同的API引擎。任何人都知道这样做的任何伎俩?
我需要防止视图在特定情况下呈现,但我无法理解如何防止呈现它。在cakephp中呈现空白视图
我试图
$this->autoRender=false
,但什么都没有发生,可能是因为我使用的管理从常规控制器呈现不同的API引擎。任何人都知道这样做的任何伎俩?
无需了解API引擎任何你正在使用,也许尝试使空布局空的内容并把它在控制器$this->layout = 'empty_layout'
尝试使用AJAX布局$this->layout = 'ajax'
这是默认空的布局,这是用于ajax方法。
在寻找解决方案时,我找到了答案。现在使用CakePHP 2.4.x的时候,你可以在你的控制器使用下面的代码:
$this->layout = false;
这将会导致刚刚视图渲染,没有一个布局。
使用$this->layout = 'ajax'
似乎并不足够。
但使用这些两行的工作:
$this->layout = 'ajax';
$this->render(false);
这是一个老问题。目前的cake-version是3.x,并且有一个使用空白布局的简单方法。从对方的回答
$this->viewBuilder()->autoLayout(false);
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)
只是明确指定不需要布局。
public function function_without_layout(){
$this->viewBuilder()->autoLayout(false);
echo "hello Brij";
exit;
}
$this->layout = false;
已在CakePHP版本3中弃用。
使用$this->viewBuilder()->autoLayout(false);
的CakePHP的版本3.
在控制器中添加此:
$this->autoRender = false;
这工作在我的项目。
仍尝试搜索视图文件并显示我错误:未找到ExampleController :: myAction()的视图 – 2016-12-24 11:12:14