Silverstripe中CMS内的验证控制器

时间:2016-04-06 14:38:05

标签: php backend silverstripe

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

这个代码是:

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

提交此表单时,操作函数应验证它是否与某些东西相等(在我的情况下,它是解密数据库中数据的密钥),然后重定向/显示Gridfield。

第二点是ModelAdmin,我可以通过GridField管理数据(来自该数据库)。 Managing data from a model

这个代码是:

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

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

这是我的问题:是否可以这样做?任何建议/帮助因为我尝试了一段时间而没有结果。

1 个答案:

答案 0 :(得分:1)

我发现很难弄清楚你想要做什么

以下是我可以看到的一些可能对您有帮助的事情:

  1. 您通常不会直接延长LeftAndMain。 99%的情况下,开发人员正在构建管理屏幕或区域,其中管理单个或多个模型(DataObject子类)。
  2. Applications课程中,您没有$allowed_actions静态。您需要至少具有一个值'applicationPassword'才能告诉SilverStripe这个控制器可以执行的合法操作。
  3. 同样,根据您要执行的操作,您通常会使用SilverStripe CMS的标准权限系统密码保护CMS管理区域(请参阅“安全”菜单项)。请注意,您可以在某些管理员屏幕上授权用户或组。 如果您正在尝试为各种自定义控制器执行此操作,则应确保控制器声明canView()方法。有关示例,请再次参阅LeftAndMain.php
  4. 验证通常在模型级别完成。例如。您有一个DataObject子类,您想在ModelAdmin中管理它。在这种情况下,您在validate()子类上定义一个名为DataObject的方法。编辑/创建此模型的新实例时 在您的ModelAdmin中,如果CMS在您的模型上找到了validate()方法,则CMS知道如何运行它。
  5. 当你说“它不工作”时,我们真的需要知道“以什么方式?”例如你看到一条错误信息,你看不到你应该做的事情,如果有的话等等等等。
  6. 如果这些点都没有帮助,那么真正帮助别人帮助的是,如果你重写了这样的问题

    “我正在尝试使用密码保护自定义CMS管理屏幕。我的模型MyModel具有以下类定义(屏幕截图或代码)和ModelAdmin(屏幕截图或代码)。代码应显示密码错误的错误消息(错误的密码是与数据库中的密码不匹配,或者不遵循特定格式等等)或密码的成功消息与DB条目匹配或确实遵循了特定的模式或格式。“

    祝你好运: - )