通用 类 Silverstripe 3.2

Generic classes Silverstripe 3.2

我有几个跨多个不同页面和数据对象使用的通用函数。我正在尝试找出存放这些东西的最佳位置。目前我在 Page.php 中有它们,但由于它们不适用于所有页面,我想将它们移动并存储在 classes 中的 mysite/code 子文件夹中,称为 helpers。如果需要,这也将帮助下一个开发人员定位和更新这些 classes。 (我可以将它留在 Page.php class 中,如果这是在 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 %>

我尝试过的东西。

那么我该如何使用这个可重复使用的代码呢?将它添加到页面是可行的,但可能会使其他开发人员在尝试更改时难以定位。

从模板来看,函数定义在

  1. 当前控制器(Page_Controller)
  2. 控制器故障转移对象(页)

为了使某些功能在不同的页面上可用,但保持DRY原则,您应该将它们定义为扩展,并为选定的页面类型声明扩展。

class PublishedArticlesController extends Extension {
    // define your methods
}

# in mysite/_config/config.yml
ArticlePage_Controller:
  extensions:
    - PublishedArticlesController