2012-01-02 137 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; 

這工作在我的項目。