首页 > 解决方案 > 页面上多个时显示错误的错误消息

问题描述

我在一个页面上有多个基本表单,由一个具有与所显示内容相关的唯一 ID 的 getter 调用:

public function getForm($ID) {
    $form = Form::create(
        $this,
        '',
        $fields = FieldList::create(
            TextField::create('Name', 'Name'),
            HiddenField::create('ID', 'ID', $ID)
        ),
        FieldList::create(
            FormAction::create('Submit', 'Submit')
        )
    );
}

如果Name不是唯一的,我想在函数中设置错误消息submit

public function Submit($data, $form = null) {
    //check stuff
    $form->addErrorMessage('Name', 'Name is already taken', 'error');
    return $this->redirectBack();
}

这可行,但错误消息显示在第一个表单而不是相关表单上。

如何将错误消息放在正确的表单上?我正在使用 SilverStripe 3.7。

标签: phpvalidationsilverstripe

解决方案


使用addErrorMessage时会将消息添加到相关命名的FormField. 您最好以某种方式将所有字段更改为唯一字段,然后将消息添加到唯一字段。使用记录的 ID 可以工作:

public function getForm($ID) {
    $form = Form::create(
        $this,
        '',
        FieldList::create(
            TextField::create('Name_'.$ID, 'Name'),
            HiddenField::create('ID', 'ID', $ID)
        ),
        FieldList::create(
            FormAction::create('Submit', 'Submit')
        )
    );
}

public function Submit($data, $form = null) {
    //check stuff
    $form->addErrorMessage('Name_'.$data['ID'], 'Name is already taken', 'error');
    return $this->redirectBack();
}

推荐阅读