2014-10-28 16 views
2

內部佈局/ default.thtml中,你會看到這樣的事情在第39行:如何在CakePHP 3中更改來自控制器的視圖塊內容?

 <div class="header-title"> 
      <span><?= $this->fetch('title') ?></span> 
     </div> 

fetch表明,它是一個視圖塊。我無法在任何地方找到此視圖塊。

目前只顯示控制器的大寫複數形式。意思是說如果你在/users/add,fetch('title');給你'Users'

我想改變它。所以我試了下:

$this->set('title', 'Login'); 

/users/login控制器的行爲。

沒有工作。

我也是在/users/login控制器動作試圖

$this->assign('title', 'Login'); 

我收到此錯誤信息:

Call to undefined method App\Controller\UsersController::assign() 

我閱讀文檔,並從here

我得到

分配塊的內容往往是有用的,當你想要一個 轉換將變量視爲塊。例如,您可能希望在控制器使用塊 的頁面標題,有時分配的標題視圖變量 :

重點煤礦。

這表明您可以在控制器內使用assign。我想我已經證明這是錯誤的。

也許在文檔中存在拼寫錯誤。請告知我如何設置標題

+0

的可能重複(http://stackoverflow.com/questions/26345051/如何更改頁面標題中的CakePHP 2-5) – Abhishek 2014-10-28 09:10:57

+1

我表示這是CakePHP 3.x.所以我不同意重複的標誌。 – 2014-10-28 10:00:01

+0

但都使用相同的功能,stackoverflow不是一個地方有一個問題,如何按價值問題爲每個php版本排序! – Abhishek 2014-10-28 11:18:42

回答

4

這是如何做到這一點,感謝irc頻道#cakephp的達科他州。

UsersController.php

$this->set('title', 'Login'); 

src/Template/Layouts/default.ctp

$this->fetch('title');

上面寫:

if (isset($title)) { 
    $this->assign('title', $title); 
} 

的問題將是如何的CakePHP 3設置的默認值?

答案是https://github.com/cakephp/cakephp/blob/3.0/src/View/View.php#L468

追加圖像發現,以防萬一鏈接腐

enter image description here

在那裏你可以看到,它會被默認爲視覺路徑

1

分配一個當你想將視圖變量轉換成塊時,塊的內容通常很有用。例如,您可能需要使用一個塊的頁面標題,有時分配標題作爲控制器視圖變量

以上不建議你應該用你的控制器分配(注意粗體)。上述建議,而不是使用

$this->start('title'); 
echo $title; 
$this->end() 

您可以使用

$this->assign('title', $title); 

$title變量應該從你的控制器進行設置。

如果你想從你的控制器做正確的方式,你必須寫

$this->set('title', $title); 

,並從您的佈局/視圖文件寫

echo $title; 
+0

該文檔使用一種麻煩的方式來表達這個想法。初學者並不是很明顯。 – 2014-10-29 03:18:10

0

蛋糕3(2?)給你可以重寫'View'類。這是調用assign()的好地方。

例子:

namespace App\View; 

use Cake\View\View; 

class AppView extends View 
{ 
    public function initialize() 
    { 
     $this->assign('the_block_name', "Hello from AppView"); 
    } 
} 

佈局/ default.thtml中:

<?= $this->fetch('the_block_name') ?> 

如果是你,在我的情況下,要定義一個 '默認' 塊,上述方案的偉大工程。您可以覆蓋任何視圖文件(.ctp)這樣的默認塊:?如何改變頁面的標題CakePHP中2.5]

$this->start('the_block_name'); 
    echo '<h4>Hello from current view!</h4>'; 
$this->end(); 
相關問題