通用类Silverstripe 3.2

时间:2016-03-24 19:35:13

标签: php silverstripe

我有几个泛型函数,我在多个不同的页面和DataObjects中使用。我正在试图找出存储这些的最佳位置。目前我在Page.php中有它们,但由于它们不适用于所有页面,我想将它们移动并存储在mysite /代码的子文件夹中的类中,称为helpers。如果需要,这还将帮助下一代开发人员定位和更新这些类。 (我可以将它留在Page.php类中,如果这是在silverstripe中完成的方式)

<?php
     public class GetPublishedArticles {
         public function GetAllPublishedArticlesByType($class){
               error_log('Hit GPA',0);
               $pages = $class::get();//->filter(array('Published'=>1));
               if($pages->count()){
                   return $pages;
                }
                else{
                     return false;
                }
         }  
     }
Template:
 <% loop GetAllPublishedArticlesByType('Page') %>
     $Link
 <% end_loop %>

我尝试过的事情。

  • 将它们添加到mysite / code / helpers文件夹,运行dev / build / flush = all,但无论函数从未被命中。即使我在那里的任何地方键入乱码,也不会抛出php错误
  • 将它们添加到mysite / code文件夹中。运行dev / build / flush = all强制进行一些更改,在这里键入乱码导致dev构建时出现php错误。无法从模板访问
  • 我尝试将类GetPublishedArticles添加到Page.php上的$ has_one数组中 - 仍然没有。
  • 直接将功能添加到page.php。 - 这可以按预期工作。

那我怎样才能使用这个可重复使用的代码呢?将其添加到页面可以正常工作,但如果他们尝试更改,可能会让其他开发人员难以找到它。

1 个答案:

答案 0 :(得分:3)

从模板的角度来看,该功能是在

上定义的
  1. 当前控制器(Page_Controller)
  2. 控制器故障转移对象(页面)
  3. 要使某些功能在不同页面上可用,但保持DRY原则,您应将它们定义为扩展名,并为所选页面类型声明扩展名。

    class PublishedArticlesController extends Extension {
        // define your methods
    }
    
    # in mysite/_config/config.yml
    ArticlePage_Controller:
      extensions:
        - PublishedArticlesController