2012-01-02 74 views
6

我需要防止视图在特定情况下呈现,但我无法理解如何防止呈现它。在cakephp中呈现空白视图

我试图

$this->autoRender=false 

,但什么都没有发生,可能是因为我使用的管理从常规控制器呈现不同的API引擎。任何人都知道这样做的任何伎俩?

回答

0

无需了解API引擎任何你正在使用,也许尝试使空布局空的内容并把它在控制器$this->layout = 'empty_layout'

4

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

3

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

$this->layout = false; 

这将会导致刚刚视图渲染,没有一个布局。

11

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

但使用这些两行的工作:

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

这是一个老问题。目前的cake-version是3.x,并且有一个使用空白布局的简单方法。从对方的回答

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

仍尝试搜索视图文件并显示我错误:未找到ExampleController :: myAction()的视图 – 2016-12-24 11:12:14

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'); 
    

而且,我使用$this->viewBuilder()->layout(false)代替autoLayout(false)因为后一种暗示,有可能是稍后再设置一个布局,其中layout(false)只是明确指定不需要布局。

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

$this->layout = false;已在CakePHP版本3中弃用。
使用$this->viewBuilder()->autoLayout(false);的CakePHP的版本3.

2

在控制器中添加此:

$this->autoRender = false; 

这工作在我的项目。