Silverstripe 中 CMS 内的验证控制器

Validation Controller inside CMS in Silverstripe

目前我有一个名为 'Applications' 的 LeftAndMain 部分,其中包含一个带有密码字段的表单:

代码是:

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();
    }
}

提交此表单时,操作函数应验证它是否与某些东西相等(在我的例子中,它是从数据库解密数据的密钥),然后 redirect/show Gridfield。

第二点是 ModelAdmin,我可以在其中通过 GridField 管理数据(来自该数据库)。

代码是:

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

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

这是我的问题:是否可以这样做?任何 suggestions/help 因为我尝试了一段时间但没有结果。

我发现很难弄清楚你真正想做什么。

以下是我看到的一些可能仍然对您有所帮助的内容:

  1. 您通常不会直接扩展 LeftAndMain。 99% 的时间,开发人员正在构建管理屏幕或区域,其中管理单个或多个模型(DataObject subclasses)。
  2. 在您的 Applications class 中您没有 $allowed_actions 静态。您需要它至少有一个值:'applicationPassword' 以便告诉 SilverStripe 该控制器可以执行哪些合法操作。
  3. 同样,根据您要执行的操作,您通常会使用 SilverStripe CMS 的标准权限系统(请参阅 "Security" 菜单项)使用密码保护 CMS 管理区域。请注意,您可以在 一些 管理屏幕上授权用户或组。 如果这是您尝试为各种自定义控制器执行的操作,则应确保您的控制器声明了一个 canView() 方法。再次查看 LeftAndMain.php 示例。
  4. 验证通常在模型级别完成。例如。你有一个 DataObject subclass,你想从 ModelAdmin 中管理它。在这种情况下,您可以在 DataObject subclass 上定义一个名为 validate() 的方法。编辑/创建此模型的新实例时 从您的 ModelAdmin 中,CMS 知道 运行 您的 validate() 方法,如果它在您的模型上找到一个方法。
  5. 当你说 "It isn't working" 我们真的需要知道 "in what way?" 例如你看到错误消息了吗?你没有看到你应该看到的东西吗?如果是的话等等等等

如果 none 这些要点有帮助,那么真正帮助别人帮助你的是,如果你重写你的问题 类似 的东西:

"I am trying to password protect a custom CMS administration screen. I have a model MyModel with the following class definition (screenshot or code), and a ModelAdmin (screenshot or code). The code should show an error message of the password is bad (a bad password is one that doesn't match one in the database, or doesn't follow a specific format etc etc) or a success message of the password matched a DB entry or did follow a specific pattern or format."

祝你好运:-)