2016-04-06 3 views
0

Im Moment habe ich einen LeftAndMain Abschnitt 'Anwendungen' genannt, die ein Formular mit einem Passwort-Feld enthält: LeftAndMain content sectionValidation-Controller innerhalb CMS in Silvers

Der Code hierfür lautet:

class Applications extends LeftAndMain { 
    static $url_segment = 'applications'; 
    static $menu_title = 'Applications'; 
    static $url_rule = '$Action/$ID'; 

    public function init(){ 
     parent::init(); 
    } 

    public function getEditForm($id = null, $fields = null) { 
     $fields = new FieldList(
      TextField::create('Password', ' Password') 
     ); 
     $actions = new FieldList(new FormAction('applicationPassword')); 
     return new Form($this, "EditForm", $fields, $actions); 
    } 

    public function applicationPassword($data, Form $form){ 
     $form->sessionMessage('Correct password. I will redirect you to manage your model', 'success'); 
     return $this->redirectBack(); 
    } 
} 

Wenn Beim Absenden dieses Formulars sollte die Aktionsfunktion prüfen, ob sie mit etwas identisch ist (in meinem Fall ist es ein Schlüssel zum Entschlüsseln von Daten aus einer Datenbank) und dann das Gridfield umleiten/anzeigen.

Der zweite Punkt ist ein ModelAdmin, wo ich die Daten verwalten kann (die aus dieser Datenbank stammen) über GridField. Managing data from a model

Der Code hierfür lautet:

class Applications2 extends ModelAdmin { 
    static $url_segment = 'applications2'; 
    static $menu_title = 'Applications2'; 

    private static $managed_models = array(
     'SecureFormInput' 
    ); 
} 

Und hier ist meine Frage: ist es möglich, dies zu tun? Irgendwelche Vorschläge/Hilfe becouse ich versuchte für und ohne Ergebnis.

+0

Was Sie versuchen, ist extra Schutz für das gleiche Modell Admin zu implementieren. Nur Zustand in getEditForm() verwenden Ihre benutzerdefinierte Form zurückzukehren, oder Standard-ModelAdmin-Formular. (noPassword? showPasswordForm: parent: getEditForm) –

Antwort

1

Ich finde es wirklich schwer herauszufinden, was du bist wirklich versuchen zu tun.

Hier sind ein paar Dinge, die ich, dass Sie immer noch, obwohl sehen könnte helfen:

  1. Sie würden LeftAndMain nicht direkt in der Regel verlängern. In 99% der Fälle erstellen Entwickler Admin-Screens oder Bereiche, in denen ein oder mehrere Modelle (DataObject Unterklassen) verwaltet werden. In Ihrer Applications Klasse haben Sie keine $allowed_actions statische. Sie benötigen mindestens einen einzelnen Wert: 'applicationPassword', um SilverStripe mitzuteilen, welche legitimen Aktionen dieser Controller ausführen kann.
  2. Je nachdem, was Sie versuchen, würden Sie normalerweise einen CMS-Adminbereich mit dem Standardberechtigungssystem von SilverStripe CMS mit einem Kennwort schützen (siehe Menüeintrag "Sicherheit"). Beachten Sie, dass Sie Benutzer oder Gruppen unter einige Admin-Bildschirme autorisieren können. Wenn Sie das für Ihre verschiedenen benutzerdefinierten Controller versuchen, sollten Sie sicherstellen, dass Ihr Controller eine canView()-Methode deklariert. Siehe auch LeftAndMain.php für Beispiele.
  3. Die Validierung erfolgt normalerweise auf Modellebene. Z.B. Sie haben eine DataObject Unterklasse, die Sie innerhalb eines ModelAdmin verwalten möchten. In diesem Fall definieren Sie eine Methode namens validate() für Ihre Unterklasse DataObject. Wenn Sie in Ihrem ModelAdmin neue Instanzen dieses Modells bearbeiten/erstellen, kann das CMS Ihre -Methode ausführen, wenn eine solche in Ihrem Modell gefunden wird.
  4. Wenn Sie sagen "Es funktioniert nicht", müssen wir wirklich wissen, "in welcher Weise?" z.B. Haben Sie eine Fehlermeldung zu sehen, sehen Sie nichts, was Sie sollten, wenn ja, was etc etc

Wenn keine dieser Punkte helfen, was wirklich andere Ihnen helfen, helfen würde, ist, wenn Sie neu geschrieben Ihre Frage dies so etwas wie:

„ich versuche, das Kennwort einen eigene CMS Verwaltung Bildschirm schützen ich habe ein Modell MyModel mit der folgenden Klassendefinition (Screenshot oder Code), und ein ModelAdmin (Screenshot oder Code)..Der Code sollte eine Fehlermeldung anzeigen, dass das Kennwort falsch ist (ein falsches Kennwort ist eines, das nicht mit einem in der Datenbank übereinstimmt oder keinem bestimmten Format usw. entspricht), oder eine Erfolgsmeldung des Kennworts entspricht einem DB-Eintrag oder haben ein bestimmtes Muster oder Format folgen.“

Viel Glück :-)

+0

Punkt 2 ist für benutzerdefinierte Controlleraktionen gültig, während Formularaktionen automatisch zur zulässigen Liste hinzugefügt werden. –