2017-12-26 23 views
2

프런트 엔드 템플릿에서이 오류가 발생합니다. 템플릿 파일이 비어 있습니다. addFieldToTab. 나는 $has_many 변수에 문제가 있다고 생각한다.silverstrip Object -> __ call() : 'fortemplate'메서드가 'HasManyList'에 없거나 메서드가 public이 아닙니다.

내 코드는 다음과 같습니다 :

class ProductsPage extends Page 
{ 
    private static $has_many = array (
    'ProductCategories' => 'ProductCategories', 
); 

    public function getCMSFields() { 
     $fields = parent::getCMSFields(); 
     $fields->addFieldToTab('Root.Main', GridField::create(
      'ProductCategories', 
      'Category', 
      $this->ProductCategories(), 
      GridFieldConfig_RecordEditor::create() 
     )); 
     return $fields; 
    } 
} 

오류 :

[사용자 오류] 캐치되지 않는 예외 : 개체 -> __()를 호출 : 방법 'fortemplate' '에 존재하지 않습니다 HasManyList '이거나 메서드가 공개가 아닙니다.

페이스트 빈의 URL은 : 내가 $has_many 변수를 제거입니다 때 https://pastebin.com/YZJn3a4t

그것은 완벽하게 작동합니다. 내 프런트 엔드 템플릿이 비어 있습니다.

어떻게이 오류를 해결할 수 있습니까?

답변

0

$ has_many 배열 값이은 단 하나의 형식이어야하지만 은 복수형이어야합니다.

귀하의 예제를 사용하여 'Category'=> 'ProductCategories'가되어야합니다 (아래 GridField를 사용하여이 것을 얻었습니다).

희망이 도움이됩니다.

+0

감사합니다. $ has_many 배열 키 이름을 변경 했으므로 작동합니다. '범주'=> 'ProductCategories'. – Sajid

+0

관계를 선언하는 방법에 대한 실제 정의가 있습니다. "관계는 클래스의 정적 배열 정의를 통해 => 형식으로 작성됩니다." https://docs.silverstripe.org/en/4/developer_guides/model/relations/. 예 : 값은 실제 클래스를 참조합니다. –