Сообщение об ошибке отображается неправильно, когда несколько на странице - PullRequest
0 голосов
/ 06 октября 2018

У меня есть несколько основных форм на странице, вызываемых получателем с уникальным идентификатором, соответствующим отображаемому контенту:

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.

1 Ответ

0 голосов
/ 10 октября 2018

При использовании addErrorMessage это добавит сообщение к соответствующему имени FormField.Было бы лучше изменить все поля, чтобы они были уникальными, а затем добавить сообщение в уникальное поле.Использование идентификатора записи может работать:

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