2017-08-12 72 views
0

我在mysite的/代码/ page.php文件一个以下内容:访问Silverstripe页要求

... 

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的/控制器定制控制器/ 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功能。希望这是有道理的!

感谢:-)

回答

2

您可以创建的ContentController一个子类,它可以作为基类为您的控制器。例如。你创建一个MyController extends ContentController,然后PlayControllerPage_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,让你的配置变量s正在被拾起。

+0

两个很好的解决方案,非常感谢! – SalutBarbu