目前我有一个名为'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();
}
}
提交此表单时,操作函数应验证它是否与某些东西相等(在我的情况下,它是解密数据库中数据的密钥),然后重定向/显示Gridfield。
第二点是ModelAdmin,我可以通过GridField管理数据(来自该数据库)。
这个代码是:
class Applications2 extends ModelAdmin {
static $url_segment = 'applications2';
static $menu_title = 'Applications2';
private static $managed_models = array(
'SecureFormInput'
);
}
这是我的问题:是否可以这样做?任何建议/帮助因为我尝试了一段时间而没有结果。
答案 0 :(得分:1)
我发现很难弄清楚你想要做什么
。以下是我可以看到的一些可能对您有帮助的事情:
LeftAndMain
。 99%的情况下,开发人员正在构建管理屏幕或区域,其中管理单个或多个模型(DataObject
子类)。Applications
课程中,您没有$allowed_actions
静态。您需要至少具有一个值'applicationPassword'
才能告诉SilverStripe这个控制器可以执行的合法操作。canView()
方法。有关示例,请再次参阅LeftAndMain.php
。DataObject
子类,您想在ModelAdmin中管理它。在这种情况下,您在validate()
子类上定义一个名为DataObject
的方法。编辑/创建此模型的新实例时
在您的ModelAdmin中,如果CMS在您的模型上找到了validate()
方法,则CMS知道如何运行它。如果这些点都没有帮助,那么真正帮助别人帮助的是,如果你重写了这样的问题:
“我正在尝试使用密码保护自定义CMS管理屏幕。我的模型MyModel
具有以下类定义(屏幕截图或代码)和ModelAdmin
(屏幕截图或代码)。代码应显示密码错误的错误消息(错误的密码是与数据库中的密码不匹配,或者不遵循特定格式等等)或密码的成功消息与DB条目匹配或确实遵循了特定的模式或格式。“