2010-02-25 40 views
2

我想從控制器中設置佈局的$ scripts_for_layout。 這是可能的,如果是的話,怎麼樣?

+1

你爲什麼要這麼做?如果是每個動作都包含的腳本,我會將其放入佈局中。如果只是採取某些行動,我會把它放在視圖中。 – 2010-02-25 16:53:12

+0

你說得對,我明白了(在下面的評論中更長的文章) – kaklon 2010-02-26 09:33:08

回答

3

簡答:也許你做錯了。

長答案:腳本不應該依賴於控制器。這在理論上是錯誤的,蛋糕不喜歡不遵守mvc模式的人。

解決方法(因爲有時你只需要):您可以在beforeRender一個變種:

function beforeRender() { 
    parent::beforeRender(); 
    $this->set('scripts', array('script1', 'script2' ...)); 
} 

而且在佈局確認爲$腳本和添加。

+0

現在你說了,我明白我做錯了。 我不想在每個視圖中使用腳本,我認爲使用控制器文件會更加明智。所以我只有一個文件可以編輯。 – kaklon 2010-02-26 09:30:10

+0

也許你可以使用不同的佈局,如果它對你更好。在這些年裏,我發現我嘗試做這個蛋糕的每一件事都不會讓我錯,或者不符合MVC標準。 蛋糕是美好的也因爲迫使你寫好,清潔和結構化的代碼。 – 2010-02-26 11:22:43

1

在Cake 1.2中,當你做$this->set('script_for_layout', 'script here...)時,它會將這個變量轉換爲$ scriptForLayout,所以它不起作用。

Cake 1.3修復了這個問題,但我沒有試過看它是否有效,但是你違反了MVC,因爲腳本是爲了View而不是在Controller級設置的。對於動態腳本,您可以像上一張海報所建議的那樣爲您的視圖分配變量。

1

我知道這是一個老問題,但今天我有同樣的問題。解決方案似乎比這裏提到的答案更容易。來自CakePHP 1.2的食譜:

內聯:塊應該內聯打印還是寫入緩存以備後續輸出(即$ scripts_for_layout)。

所以,在你看來,你只需要包含腳本設置在線爲假,像這樣:

$javascript->link('script1', false) 

您可以爲CSS做同樣的:

$html->css('stylesheet1', null, array(), false) 

關注:我只在CakePHP 1.2上測試過。但根據1.3的食譜,這是一回事。

相關問題