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 function
console.log(respnsoe)。检查 PHPMick 那里的答案。
我正在构建一个 API,所以我没有ajax
,所以我想知道如何将这些错误消息作为 JSON 发送,如果可能的话,请您发布一些示例代码,如您所说我没有收到任何带有 422 的 laravel 默认消息,我正在使用邮递员来测试 API,所以当我使用空字段发布时,我看到的是 laravel 主页【参考方案2】:
请在相关模型类名后写下一行。
xyz 类扩展模型 受保护的 $table = '课程';
代码---
试试这个。
【讨论】:
以上是关于Laravel 表单验证器错误的主要内容,如果未能解决你的问题,请参考以下文章