【问题标题】:Translating or writing custom messages on Respect/Validation翻译或编写关于尊重/验证的自定义消息
【发布时间】:2026-01-15 16:30:01
【问题描述】:

我正在使用 Respect 来验证项目中的某些表单,但这个项目是西班牙语的,在花了很长时间阅读文档甚至其代码之后,我不明白消息是如何工作的。

我正在使用 Slim,并且我正在使用 NestedValidationException,这是我在 Youtube 上的教程中阅读的示例。

这是验证方法:

public function validate($request, array $rules) 
    {
        foreach ($rules as $field => $rule) {
            try {
                $rule->setName(ucfirst($field))->assert($request->getParam($field));
            } catch (NestedValidationException $e) {
                    $e->findMessages([
                    'usernameAvailable' => '{{name}} ya existe en la base de datos',
                    'emailAvailable' => '{{name}} ya existe en la base de datos',
                    'notEmpty' => '{{name}} no puede estar vacío',
                    'noWhitespace' => '{{name}} no puede contener espacios',
                    'email' => '{{name}} debe contener un e-mail válido'
                ]);
                 //In English it's enough with 
                 //$this->errors[$field] = $e->getMessages();
                     $this->$errors[$field] = $e->getMainMessage();

            }
        }

        $_SESSION['errors'] = $this->errors;



        return $this;
    }

我之前看过一些回复,但有些回复对我来说很难理解,因为我不打算对图书馆进行整个翻译。我只是在尝试编写 5 或 6 条自定义消息。

编辑:使用消息的方法:

 $validation = $this->c->validator->validate($request, [
            'username' => v::noWhitespace()->notEmpty()->usernameAvailable(),
            'email'  => v::noWhitespace()->notEmpty()->email()->emailAvailable(),
            'password1' => v::noWhitespace()->notEmpty(),
            'password2' => v::noWhitespace()->notEmpty()->identical($inputPassword),

        ]);

【问题讨论】:

  • 我不确定您的问题是什么。您能否包括您期望的输出和validate 方法的输入?
  • 我想将这些规则的消息翻译成另一种语言。

标签: php validation respect-validation


【解决方案1】:

findMessages 与您要翻译消息的参数一起使用。您只需替换 catch 块中的内容:

catch (NestedValidationException $e) {
    $errors = $e->findMessages([
        'usernameAvailable' => '{{name}} ya existe en la base de datos',
        'emailAvailable' => '{{name}} ya existe en la base de datos',
        'notEmpty' => '{{name}} no puede estar vacío',
        'noWhitespace' => '{{name}} no puede contener espacios',
        'email' => '{{name}} debe contener un e-mail válido'
    ]);
    $filteredErrors = array_filter($errors); // Ensure the array is not containing empty values
    $this->$errors[$field] = $filteredErrors;
}

【讨论】:

  • 我有完全相同的设置,当使用 findMessages 方法时,我确实取回了我的自定义消息,但 {{ name }} 参数没有被替换。我在验证规则链上链接了 setName('Vorname') 但没有成功它只在使用 getMessages 方法时有效,但随后显示原始英文消息有人知道为什么会这样吗?
  • @Chris 我认为最好创建一个新问题来解释您的问题的背景并找到更多可以回答的用户。