【问题标题】:Access Silverstripe Page Requirements from a controller从控制器访问 Silverstripe 页面要求
【发布时间】:2017-08-12 18:13:28
【问题描述】:

我在 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。如果我将需求放在模板/Page.ss 中,它们将由 PlayPage.ss 继承。但我想将需求放在控制器中,这样我就可以使用 Silverstripe 的 combine_files 功能。希望这是有道理的!

谢谢:-)

【问题讨论】:

    标签: php silverstripe


    【解决方案1】:

    你可以创建一个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,以便获取您的配置变量。

    【讨论】:

      猜你喜欢
      • 2014-04-23
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多