按页面 id SilverStripe 3 过滤数据对象

Filter dataobject by page id SilvertStripe3

我有一个页面类型 "class Test extends Page" 它有很多 'TestBlocks' => 'TestBlock',然后 CMS 用户将新数据输入到 CMS 后端的字段中,我需要的是从 "class TestBlock extends DataObject" 获取这些值并使用它们创建一个表单。基本上该数据成为问题,但我不确定如何以正确的方式将其放入我的测试控制器中。当我尝试 dataobect 的 get 方法时,它 returns 来自页面类型的所有页面的所有值,而不是下面的特定页面代码:

class Test_Controller extends Page_Controller
{
private static $allowed_actions = array(
    'TestForm',

);

public function TestForm()
{

    $players = MultiQuestion::get();
    echo $players->QuestionText;
    $array = [];
    foreach ($players as $player) {
        $array[] = TextField::create($player->QuestionText)->setFieldHolderTemplate('Field_Holder');
    }

    $fieldGroup1 = CompositeField::create(
        $array

    )->setName('FieldGroup1');

    $fields = FieldList::create($fieldGroup1);
    $actions = FieldList::create(
        FormAction::create('submit', 'Get Results')->addExtraClass('get_results')
    );
    $form = Form::create($this, __function__, $fields, $actions);

    return $form;
}
}

您可以使用 $testBlocks = $this->TestBlocks() 假设您已正确设置关系。

TestBlock.php

class TestBlock extends DataObject {
  static $has_one = array(
    'Test' => 'Test'
  );
}

Test.php

class Test extends Page {
  static $has_many = array(
    'TestBlocks' => 'TestBlock'
  );
}

class Test_Controller extends Page_Controller {

  public function TestForm() {
    $testBlocks = $this->TestBlocks();
    //other code
  }
}