2010-02-25 72 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的食谱,这是一回事。

相关问题