2016-07-25 6 views
2

毎回GridFieldConfigの再構築を簡単にするクラスを作成しようとしています。私は私のCMSでほぼすべてのGridFieldConfigための次の設定を使用します。GridFieldConfigのSilverStripe拡張

$config = GridFieldConfig::create()->addComponents(
     new GridFieldToolbarHeader(), 
     new GridFieldAddNewButton('toolbar-header-right'), 
     new GridFieldTitleHeader(), 
     ... etc 
    ) 

ではなく自分自身を毎回繰り返すことを、私はむしろ上記componentsでGridFieldConfigのインスタンスを返すクラスを作成したいです。だから私はこのクラスを作成しましたが、正しく動作させるにはどうすればいいのですか?フレームワーク/ CMSにプラグインしてください。

GridField::create('Foo', 'Bar', $this->Foo(), new CustomGridConfig()); 

私も、私は非常にわからないんだけど、それはそのようなクラス内のクラスを作成することが可能かどうかわからない、次のように

<?php 

class CustomGridConfig extends ??? { 

function __construct() { 

    $config = GridFieldConfig::create()->addComponents(
     new GridFieldToolbarHeader(), 
     new GridFieldAddNewButton('toolbar-header-right'), 
     new GridFieldTitleHeader() 
     ... etc 
    ); 

    return $config; 

    } 

} 

は、最終的にそれがGridFieldで実装されるだろうこのクラスをCMSにロードする方法。

この設定の概念は実行可能ですか?もしそうなら、どうですか?これは、フレームワーク/ CMSを適切に拡張する方法を理解するのに役立ちます。

+0

私はDansやJannesのソリューションを提案したいと思います。 – Barry

答えて

3

SilverStripeはすでにGridFieldConfig Sのセットが付属していますあなたが必要とするものをすでに実行している可能性があります。

あなたがGridFieldConfigを拡張したいと、このようなコンストラクタであなたのコンポーネントを追加します、あなたの質問に答えるために:

class CustomGridConfig extends GridFieldConfig { 
    public function __construct() { 
     $this->addComponents(
      new GridFieldToolbarHeader(), 
      new GridFieldAddNewButton('toolbar-header-right'), 
      new GridFieldTitleHeader() 
      ... etc 
     ); 
    } 
} 

このクラスは、あなたが「フラッシュ」を実行した後に使用して利用できるようになります(いずれかに?flushを追加サイトのURL) - the documentation on cachingを参照してください。

the docs for information on the built in configsを参照してください。

+1

私はどこでこれらのデフォルト設定を先に見たのだろうかと思っていました。彼らがドキュメントに載っているのを見るのは素晴らしいことです。 – Faloude

1

コンセプトは良好でセットアップは実行可能です。私は、静的メソッドは問題ないはずただのクラスがあり、その後、あなたのメソッドを追加...コンストラクタとして問題ないはずですが、そうでない場合と思います...

class CustomGridConfig { 
    public static function create() { 
     $config = GridFieldConfig::create()->addComponents(
       GridFieldToolbarHeader::create(), 
       GridFieldAddNewButton::create('toolbar-header-right'), 
       GridFieldTitleHeader::create() 
       ... etc 
      ); 

     return $config; 
    } 
} 
+1

これは、GridFieldConfigを拡張するためのやや奇妙なアプローチです。これは、拡張の利点を失い、実際には新しいGridFieldConfigではなくファクトリクラスを作成することになります。これは、 'Object'がもはや継承ツリーにないので、コアの利点を失います。 –

+0

@DanHensbyグリッドフィールドの拡張ではない点です...これらのデフォルトコンフィグをGridFieldに追加するのはユーティリティクラスです。私はそれを拡張すると考えました...しかし、それはOPが求めていたものではないと思った。私は間違っている可能性があります:) – Barry

+0

バリーを修正、私は実際には単にユーティリティクラスとして使用しています。ただし、親クラスのプロパティが必要な場合、Danのソリューションは将来的にはより便利になる可能性があります。 – Faloude

3

私はあなたがそうのようなGridFieldConfigを拡張してカスタムGridFieldConfig Sを作成することができると思います。その後、

class CustomGridFieldConfig extends GridFieldConfig { 

    public function __construct() { 
     parent::__construct(); 
     $this->addComponent(new GridFieldToolbarHeader()); 
     $this->addComponent(new GridFieldAddNewButton('toolbar-header-right')); 
     // etc... 
    } 

} 

そしてそうのようなあなたのGridFieldに渡し:

GridField::create(
    'Foo', 
    'Bar', 
    $this->Foo(), 
    CustomGridFieldConfig::create() 
); 

は、ファイル内のクラスGridFieldConfig_RelationEditorをチェックインスピレーションのためにGridFieldConfig.php