laravel - 分离的 [create] 和 [store] 函数的验证在 Laravel6 中不起作用
问题描述
我正在使用这些代码研究商店数据。此代码可以存储数据但没有验证。所以我正在尝试添加验证部分。实际上,这是我第一次看到分离的 [create] 和 [store] 函数,所以我不确定如何附加 validate 函数。我试图调整代码,但没有奏效。请教我正确的代码好吗?
public function create() {
$users = User::All();
$users = User::with('products')->get();
$categoris = Categori::All();
$categoris = Categori::with('products')->get();
$creators = Creator::All();
$creators = User::with('products')->get();
$creators = DB::table('creators')->where('creators.br_no', Auth::user()->br_id)->get();
$data = array(
'title' => request('title'),
'kansu' => request('kansu'),
'categoris' => $categoris,
'creators' => $creators,
'users' => $users
);
return view('product.create',$data);
}
public function store() {
Product::create([
'title' => request('title'),
'kansu' => request('kansu'),
'creator_id' => request('creator_id'),
'user_id' => request('user_id'),
'br_id' => request('br_id'),
'color_id' => request('color_id'),
'categori_id' => request('categori_id')
]);
return redirect('/product/ownbr');
}
我在代码的顶部添加了这个验证
protected function validator(array $data) {
return Validator::make($data, [
'creator_id' => 'required|string|max:255',
'color_id' => 'required|string|max:255',
'categori_id' => 'required|string|max:255',
'title' => 'required|string|max:255',
'kansu' => 'required|string|max:255',
]);
}
解决方案
您可以通过两种方式做到这一点:- 在存储方法的顶部,您可以像这样进行验证:-
public function store(Request $request)
{
$validated = $request->validate([
'creator_id' => 'required|string|max:255',
'color_id' => 'required|string|max:255',
'categori_id' => 'required|string|max:255',
'title' => 'required|string|max:255',
'kansu' => 'required|string|max:255',
]);
Product::create([]);
return redirect('/product/ownbr');
}
第二种方式,你可以通过这个命令创建表单请求,php artisan make:request ProductRequest。您将在 app/http/requests 中找到此类在规则方法中添加您的验证
public function rules()
{
return [
'creator_id' => 'required|string|max:255',
'color_id' => 'required|string|max:255',
'categori_id' => 'required|string|max:255',
'title' => 'required|string|max:255',
'kansu' => 'required|string|max:255',
];
}
在同一个班级中也可以更改:
public function authorize()
{
return true;
}
然后你可以像这样在你的控制器中使用这个请求:
public function store(ProductRequest $request)
{
Product::create([
]);
}
我推荐第二种方式,因为它将验证过程与控制器分开,这样控制器就更干净了
推荐阅读
- firebase - 如何修复这个 Firebase 一直给我这个错误 Paths must not contain // in them., null, java.lang.IllegalArgumentException: Invalid path
- python - Python:如何使用集合?[问题]
- swift - CAAnimationGroup 计时
- java - Android SimpleDateFormat 中的错误
- python - 为什么我的循环逻辑的 Python CSV 不起作用
- bash - 我如何获得 bash 的“find -rename”命令来打印它要做什么而不做它?
- python - Tkinter:几何与框架一起工作正常,但一旦在框架内使用笔记本就会混乱
- python - 如何使用 Python 中的离散均匀分布将 0-1 范围内的数字转换为 1-52 范围内的数字?
- sql-server - 查询计划忽略大连接上的索引
- haskell - 如何在堆栈跟踪(haskell)中获取行号?