Ich habe einen Kundencontroller, der ein Formular enthält. Ich möchte ein Formular von einem anderen Controller zu derselben Kundenseite hinzufügen. Gibt es eine Möglichkeit, dies in der Silverstripe-Leiste mit einem iFrame zu tun?Silverstripe - Controller in den Controller einbeziehen
Antwort
gut, ja, aber Sie müssen wahrscheinlich einige Änderungen an Ihrem Code.
gibt es zwei Hauptansätze ich Ihr Ziel zu erreichen denken kann:
1. trennt die Formularerstellung aus der Controller-Aktion:
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. verschachtelter Controller:
Mit SilverStripe können Sie Controller verschachteln. Dies ist im Wesentlichen was Forms bereits tun. Ein SilverStripe-Formular ist ein Controller
(oder besser RequestHandler
).
In SilverStripe kann jede Controller
Aktion eine andere RequestHandler
(Controller
ist eine Unterklasse von RequestHandler
) zurückgeben, die dann verarbeitet wird.
So können Sie den gesamten Bar-Controller aus dem Foo Controller zurückgeben und es als Kind-Controller laufen lassen. Die URL könnte also /foo/bar/BarForm
lauten.
Aber mit Standard-Controllern, denke ich, müssen Sie ein bisschen basteln, um verschachtelte URLs zu haben.
Werfen Sie einen Blick auf meine ContentBlock/PageBuilder Modul für ein fortgeschrittenes Beispiel von verschachtelten Controller mit Forms:
PageBuilder_Field.php#L179
PageBuilder_Field_Handler_Block.php#L32
- 1. Silverstripe: Seite Controller Redirect Zurück funktioniert nicht
- 2. Rails - Wie kann ich die zugehörigen Modelldaten in einen json-Controller-Controller einbeziehen?
- 3. extend controller in zend Controller
- 4. wie an den Controller
- 5. Behält PushViewController den Controller?
- 6. Controller-Aktionen Zurück
- 7. Kann nicht an den Controller ohne Anweisung 'searchBox-Controller
- 8. kann ein Controller den Benutzer an einen anderen Controller senden
- 9. ascx MVC Controller muss den rufenden Controller kennen
- 10. WebApi Controller keine Aktion gefunden für den Controller
- 11. UISearchController macht den Controller schwarz
- 12. get_global_size (0) stürzt den Controller
- 13. Navigation Controller Ausgabe in Container-View-Controller
- 14. Liste über den Controller senden
- 15. Kann den Controller nicht ausführen
- 16. Fetching den Namen des Controller
- 17. MessageID an den Controller übergeben?
- 18. Ajax traf den Controller nicht
- 19. View Controller Frame-Größe in Kind-Controller
- 20. Navigation Controller Push-View-Controller-
- 21. Wie Controller Controller-Anweisung testen?
- 22. Verwenden Sie den Bereich der aktuellen Controller und den übergeordneten Controller in $ scope. $ On
- 23. Schritt durch den Code in AngularJS - Controller
- 24. Wie man einen Controller in den Routen
- 25. MVC Werte in den Controller eingeben
- 26. Dateidaten fallen nicht in den Controller
- 27. Dependency-Injektion in den Controller mit $ inject
- 28. Übergeben URL-Parameter in den Controller - Laravel
- 29. TypeError: $ Controller ist keine Funktion + Controller im Controller
- 30. Fehler: Keine Controller: ngModel
Wenn Sie eine „Include“ Vorlage für diese Form haben, können Sie, dass aus einer anderen Vorlage enthalten kann, Ja –