私はカスタマーコントローラーにフォームを持っています。私がしたいのは、別のコントローラのフォームを同じ顧客ページに追加することです。 SilverstripeバーでiFrameを使ってこれを行う方法はありますか?シルバーストライプ - コントローラー内にコントローラーを含める
0
A
答えて
1
もちろん、コードにいくつかの変更が必要な場合があります。
私はあなたの目標を達成するための考えることができる2つの主要なアプローチがあります:
1.コントローラのアクションから、フォームの作成を分離:
class Foo extends Controller {
private static $allowed_actions = ['FooForm', 'BarForm'];
public function FooForm() {
return new Form($this, __FUNCTION, new FieldList(), new FieldList());
}
public function BarForm() {
return Bar::get_bar_form($this, __FUNCTION__);
}
}
class Bar extends Controller {
private static $allowed_actions = ['BarForm'];
public function BarForm() {
return static::get_bar_form($this, __FUNCTION__);
}
/**
* A static function that accepts the controller (Bar or Foo in this case) and a name
* This way, this form can easily be used on other controllers as well
* Just be aware that this way, the Forms controller is not always the same, so if you have a custom form that calls specific methods of the Bar controller this will not work
*/
public static function get_bar_form($controller, $name) {
return new Form($controller, $name, new FieldList(), new FieldList());
}
}
2.ネストされたコントローラ:
SilverStripeでは、コントローラをネストすることができます。これは本質的にFormsがすでに行っていることです。 SilverStripeフォームはController
(または、むしろRequestHandler
)です。
SilverStripeでは、いずれのController
アクションも別のRequestHandler
(Controller
はサブクラスであるRequestHandler
)を返すことができ、処理されます。
したがって、Fooコントローラ内からバーコントローラ全体を返し、子コントローラとして実行することができます。 URLは/foo/bar/BarForm
となります。
しかし、標準のコントローラでは、ネストされたURLを持つために微妙な作業が必要になると思います。 、あなたはそのフォームのテンプレートを「含む」がある場合、あなたは別のテンプレートからのことを含めることができ
PageBuilder_Field.php#L179
PageBuilder_Field_Handler_Block.php#L32
関連する問題
- 1. 別のコントローラー内の角度付きコントローラー
- 2. コントローラーを別のコントローラーにリダイレクト
- 3. PrestaShop:コントローラー内にコントローラーをロードする方法は?
- 4. コントローラーのコントローラーのアクションコールオーダー
- 5. コントローラー内のEmberファイアーフィルターデータ
- 6. コントローラーから前のコントローラーに戻る
- 7. WEB APIコントローラーとMVCコントローラー
- 8. コントローラー内のアクションから他のコントローラー内のビューにデータを渡すZend
- 9. コントローラー内のコントローラーを呼び出します。 Play Framework
- 10. TypeError:$ controllerは関数ではありません+コントローラー内のコントローラー
- 11. 外部コントローラー指令内のコントローラーの呼び出し機能
- 12. コントローラー内のPlay Frameworkメッセージ
- 13. コントローラー内のページネイターのアクセスID
- 14. Laravel nullコントローラー内のPOSTデータ
- 15. 他のコントローラーを呼び出すSpringコントローラー
- 16. コントローラー内からステージにアクセスする
- 17. コントローラーIDに基づいてページ内のコントローラーを使用できますか?
- 18. codeigniter3コントローラーからコントローラーへの機能
- 19. コントローラー内のビューモデルを切り替える
- 20. あるコントローラーから別のコントローラーにオブジェクトを渡す方法
- 21. Odataコントローラー
- 22. CakePHP 2.0のコントローラー内のモデルデータにアクセス
- 23. コントローラーからコントローラーをロードせずに、1ページに複数のコントローラーを組み合わせる
- 24. コントローラーから別のコントローラーにデータを渡す
- 25. AngularJSはコントローラーから別のコントローラーにデータを送信します
- 26. 毎回コントローラー内の@instance_variableを増やす
- 27. コントローラーをポップするとコントローラーから離れたnav
- 28. Ember - 他のコントローラー機能でコントローラー機能を使用する
- 29. iPhone - 親コントローラーに "戻る"アニメーション
- 30. コントローラーのロードbefore_filter
:
は、フォームでのネストされたコントローラの高度な例のために私のContentBlock/PageBuilderモジュールを見てみましょうええ –