我在mysite / code / Page.php中有以下内容:
...
class Page_Controller extends ContentController {
public function init() {
parent::init();
Requirements::javascript("themes/example/js/global1.js");
Requirements::javascript("themes/example/js/global2.js");
Requirements::javascript("themes/example/js/global3.js");
}
}
...
然后是mysite / controllers / PlayController.php中的自定义控制器:
...
class PlayController extends ContentController {
public function init() {
parent::init();
Requirements::javascript("themes/example/js/play.js");
}
}
...
我想在PlayController.php中使用Page.php的要求。既然它们都延伸ContentController
,这可能吗?
一点背景; PlayController
用于使用模板Layout / PlayPage.ss显示剧院游戏的页面。如果我将需求放在templates / Page.ss中,它们将由PlayPage.ss继承。但我想将要求放在控制器中,因此我可以使用Silverstripe的combine_files
功能。希望这是有道理的!
谢谢: - )
答案 0 :(得分:2)
您可以创建一个ContentController
的子类,它可以作为两个控制器的基类。例如。您创建了MyController extends ContentController
,然后PlayController
和Page_Controller
扩展MyController
。
或你可能只需要两个控制器中的所有文件......如果冗余太多,你也可以使用配置API。这是一个例子:
class Page_Controller extends ContentController
{
private static $js_requirements = [
"themes/example/js/global1.js",
"themes/example/js/global2.js",
"themes/example/js/global3.js"
];
public function init() {
parent::init();
foreach ($this->config()->js_requirements as $js) {
Requirements::javascript($js);
}
}
}
然后在您的PlayController
中,您可以像这样访问Page_Controller
的配置:
class PlayController extends ContentController
{
public function init() {
parent::init();
foreach (Config::inst()->get('Page_Controller', 'js_requirements') as $js) {
Requirements::javascript($js);
}
Requirements::javascript("themes/example/js/play.js");
}
}
然后,您还可以使用YAML配置来配置您的要求,例如:
# mysite/_config/config.yml
Page_Controller:
js_requirements:
- "themes/example/js/global4.js"
注意:始终使用dev/build
,以便您的配置变量被选中。