Laravel - 错误信息没有翻译成实际的错误信息,以“validation.”开头。

12

我正在尝试在Laravel中实现表单验证,但出现了问题,这很奇怪,因为通常它都能正常工作。

在我的用户模型中,我已经创建了用于验证的规则:

public static $rules = array(
    'firstname'=>'required|min:2|alpha',
    'lastname'=>'required|min:2|alpha',
    'email'=>'required|email|unique:users',
    'password'=>'required|alpha_num|between:8,12|confirmed',
    'password_confirmation'=>'required|alpha_num|between:8,12',
    'telephone'=>'required|between:10,12',
    'admin'=>'integer'
);

在我的用户控制器中,我只有在验证通过的情况下才定义操作,否则用户将被重定向回来并显示错误信息:

public function postCreate() {
    $validator = Validator::make(Input::all(), User::$rules);

    if ($validator->passes()) {
        $user = new User;
        $user->firstname = Input::get('firstname');
        $user->lastname = Input::get('lastname');
        $user->email = Input::get('email');
        $user->password = Hash::make(Input::get('password'));
        $user->telephone = Input::get('telephone');
        $user->save();

        return Redirect::to('users/signin')
            ->with('message', 'Thank you for creating a new account. Please sign in.');
    }

    return Redirect::to('users/create-account')
        ->with('message', 'Something went wrong')
        ->withErrors($validator)
        ->withInput();
}
以下错误已发生: 在视图中,如果存在错误,则显示它们:
@if($errors->has())
    <div id="form-errors">
    <p>The following errors have occurred:</p>

    <ul>
        @foreach($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
    </div><!-- end form-errors -->
@endif

我的问题是,当提交一个空表单时,它的输出结果是:

validation.required
validation.required
validation.required
validation.required
validation.required
validation.required

改为:

The firstname field is required.
The lastname field is required.
The email field is required.
The password field is required.
The password confirmation field is required.
The telephone field is required.
如果有人能够建议我为什么会出现这种情况,或者我漏掉了什么,那将不胜感激!

在Laravel 5中遇到了相同的问题,不知道为什么... - Lloople
我也是!在Laravel 5中,但只有特定的环境/服务器。 - Rico Leuthold
@Lloople 真的很遗憾,这让我对 Laravel 失去了兴趣...不过也没关系,因为现在我正在学习更多的 JavaScript :) 如果你找到了答案,请务必发布一下? - Craig van Tonder
@IndigoIdentity 我的问题是我用 Config::set('app', $my_config_array) 覆盖了默认设置,因此丢失了 app.language 的值。 - Lloople
8个回答

10
如果以前起作用,那么您应该检查是否在 app\lang\en\validation.php 中定义了消息,或者您可能已更改了应用程序的区域设置(locale)并且未为其定义消息。有很多可能性。

嘿,谢谢回复。我正在使用默认的错误消息,这些消息确实在validation.php文件中定义。真奇怪,一切似乎都是100%正确的,但是验证没有将错误翻译成消息? - Craig van Tonder

7

我遇到了类似的问题,问题出在我不小心删除了resources/lang/en/validation.php文件。


4
我遇到了这个问题。 检查lang目录,它应该放在resource目录中。
我把lang目录拖到另一个目录中,然后我得到了与你相同的验证响应。解决方法只是将其移回resource目录即可。

2

当我将区域设置和备选区域设置为在app.php中没有验证文件的区域设置时,遇到了类似的问题。尝试将备选区域设置为en或您确定存在的区域设置。


0

针对这个问题的解决方案是检查您的lang目录是否存在于/resources目录下。


0

文件project\lang\en\validation.phpproject\resources\lang\en\validation.php丢失

简单来说lang文件夹不存在于resources\lang中。只需将lang文件夹复制粘贴到resources中即可。

如何找出问题所在? 我安装了一个新的 Laravel 应用程序,带有 Breez Vue Inertia,它可以正常使用错误消息,然后我比较了一下当前的项目结构并进行了一些研究,最终得出了解决方案。

只要将整个文件夹从 project\lang 复制并粘贴到 project\resources\lang 中即可。如果 resources 中没有 lang 文件夹,则只需创建该文件夹并粘贴复制的文件即可。 它就能运行了!当您创建简单的 Laravel 项目 并稍后安装 Vue 等时,此错误通常会发生,并在安装/配置期间意外跳过 resources/lang 中的 lang 文件夹。

如果您没有validation.php文件,那么只需转到 github laravel / laravel 并复制该文件。


0
我有同样的问题,这是解决该问题的方法。
检查是否存在 resources/lang/en/validation.php 文件。
或者
在 config\app.php 中将您的 locale 和 fallback_locale 更改为 'en'。
'locale' => 'en',
...
...
'fallback_locale' => 'en',
...

然后运行,php artisan config:cache

0

你需要在以下位置创建一个文件

resources/lang/en/validation.php

并复制此网址的内容 PHPClasses


仍然不明白他为什么要这样做,没有足够的信息。 - Eyad Mohammed Osama
因为这些步骤解决了我的问题,现在它显示实际的错误而不是validation.required,这只需要两个步骤:第一步,在指定位置创建一个名为validation.php的文件;第二步,从PHPClasses复制内容。 - smchauhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接