2017-12-26 12 views
2

フロントエンドテンプレートでこのエラーが発生しました。テンプレートファイルが空です。 addFieldToTab。私は$has_many変数に問題があると思います。silverstripオブジェクト - > __ call():メソッド 'fortemplate'が 'HasManyList'に存在しないか、メソッドが公開されていません

マイコードは以下の通りです:

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 '、またはメソッドが publicではありません。

ペーストビンのURL:https://pastebin.com/YZJn3a4t

私はそれが完璧に動作$has_many変数を削除しています。私のフロントエンドのテンプレートは空です。

このエラーを修正するにはどうすればわかりませんか?

答えて

0

$ has_manyの配列の値は、単数形であるべきですが、のキーは複数です。

あなたの例を使用すると、これは 'Category' => 'ProductCategories'でなければなりません(これは、以下のGridFieldで何をしているのか分かります)。

これが役に立ちます。

+0

ありがとう、私は$ has_many配列キー名を変更し、それは仕事です。 'カテゴリ' => 'ProductCategories' – Sajid

+0

リレーションを宣言する方法は実際に定義されています。「リレーションは、クラスの静的配列定義を通じて、 =>の形式で構築されます。 https://docs.silverstripe.org/en/4/developer_guides/model/relations/にアクセスしてください。たとえば、値は実際のクラスを参照します –

関連する問題