Laravel 表单验证器错误

Posted

技术标签:

【中文标题】Laravel 表单验证器错误【英文标题】:Laravel form validator error 【发布时间】:2017-05-20 21:00:30 【问题描述】:

我想在将数据存储到数据库之前验证输入字段,所以我浏览了 laravel 文档并遵循了这些

    php artisan make:request StoreLessons

    StoreLessons

    public function rules()
        
            return [
                'title' => 'required|unique:lesson',
                'body' => 'required',
            ];
        
    

    在我的控制器中

namespace App\Http\Controllers;

use Response;
use App\lesson;
use Illuminate\Http\Request;
use App\Acme\Transformers\LessonTransformer;
use Illuminate\Support\Facades\Input;
use App\Http\Requests\StoreLessons;

class LessonsController extends ApiController 


    protected $lessonTransformer;

    function __construct(LessonTransformer $lessonTransformer) 
    
        $this->lessonTransformer = $lessonTransformer;
    

    //fetch all and pass a metadata 'data' 
    public function index() 
    
        $lessons = Lesson::all();

        return $this->respond([
            'data' => $this->lessonTransformer->transformCollection($lessons->all())
        ]);
    

    //add a new lesson to lessons table
    public function store(StoreLessons $request) 
    
        Lesson::create($request->all());

        //Lesson::create(input::all());

        return $this->respondCreated('Lesson created successfully');
    



现在我遇到了这个错误

QueryException in Connection.php line 770:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel_api.lesson' doesn't exist (SQL: select count(*) as aggregate from `lesson` where `title` = the)

我不知道它为什么要查找 lesson 表我有一个 lessons

store() 函数使用默认验证

//this works fine but i wan to do the validation 
    public function store() 
    
        if (! input::get('title') or ! input::get('body')) 
            return $this->respondBadRequest();
        

        Lesson::create(input::all());

        return $this->respondCreated('Lesson created successfully');
    

谢谢

【问题讨论】:

与您的问题无关,但是,根据 laravel 命名约定,您的模型名称应为 Lesson 而不是 lesson。所以这个模型会自动在你的数据库中找到表lessons 嘿,感谢您抽出宝贵时间,将unique:lesson 更改为lessons 时出错 我的意思不是在您的验证规则中,而是在模型的名称中。 use App\lesson 应该是 use App\Lesson 【参考方案1】:
unique:table,column,except,idColumn

唯一的语法如上,传递的第一个参数是表名。

public function rules()  
    return [ 'title' => 'required|unique:lesson', 'body' => 'required', ];

这里的唯一规则查找表lesson。尝试将其更改为lessons

【讨论】:

非常感谢你的工作,你能告诉我如何将错误作为JSON 传递给视图,现在如果我发送带有空字段的请求,我将重定向到@987654327 @ 一旦你通过了验证,如果有验证错误就这样做。 return response()->json($validator->errors(), 422)。这里$validator 是您的验证结果 你能告诉我如何在我的方法中做到这一点我必须返回成功以及失败public function store(StoreLessons $request) Lesson::create($request->all()); return response()->json($validator->errors(), 422) //Lesson::create(input::all()); return $this->respondCreated('Lesson created successfully'); 看看this,Laravel 5.3 默认发送一个状态码为 422 的错误。所以删除我在控制器中建议的上述行。在你的 ajax 中,error functionconsole.log(respnsoe)。检查 PHPMick 那里的答案。 我正在构建一个 API,所以我没有ajax,所以我想知道如何将这些错误消息作为 JSON 发送,如果可能的话,请您发布一些示例代码,如您所说我没有收到任何带有 422 的 laravel 默认消息,我正在使用邮递员来测试 API,所以当我使用空字段发布时,我看到的是 laravel 主页【参考方案2】:

请在相关模型类名后写下一行。

xyz 类扩展模型 受保护的 $table = '课程';

代码---

试试这个。

【讨论】:

以上是关于Laravel 表单验证器错误的主要内容,如果未能解决你的问题,请参考以下文章

怎么把laravel的表单验证信息改成中文

Laravel 5表单请求验证返回禁止错误

从 Laravel 的表单验证中获取纯错误消息?

向 Laravel 表单添加自定义验证错误

Laravel 5 验证 - 表单元素上的错误类

如何在 laravel 表单验证错误消息中给出自定义字段名称