Laravel在reques验证类中获取模型对象
标签:
Laravel
大家好今天猪哥给大家讲下在Laravel框架中如何 在Request验证类中获取模型对象
如图所示:
假如我们现在有个需求就是编辑的文章标题不能重复,我们应该怎么做呢?有1 个地方需要思考下,就是如何不在html表单 传递 文章id的情况下
获取 文章的id!因为我们在做表单验证的时候,需要对标题做唯一性检查,还有个问题需要思考下,就是验证标题唯一性的时候要排除当前要编辑的文章。下面看看猪哥
是怎么做的吧
我们先创建一个验证类
php artisan make:request TopicRequest
生成文件后我们 开始 编写代码:代码如下
<?php namespace App\Http\Requests; use Illuminate\Support\Facades\Auth; class TopicRequest extends Request { public function rules() { switch($this->method()) { // CREATE case 'POST': return [ 'title' => 'required|min:2|unique:topics,title', 'body' => 'required|min:10', 'category_id' => 'required|numeric', ]; break; // UPDATE case 'PUT': case 'PATCH': { return [ 'title' => 'required|min:2|unique:topics,title,'. $this->route('topic')->id, 'body' => 'required|min:10', 'category_id' => 'required|numeric', ]; } } } public function messages() { return [ 'title.min' => '标题必须至少两个字符', 'title.unique' => '文章标题重复', 'body.min' => '文章内容必须至少三个字符', 'category_id.required' => '请选择帖子分类' ]; } }
请注意下图 的代码片段
在 Laravel 中如果验证 唯一性 可以使用 unique:表名称,字段名称 就可以了,这种方法只局限在创建
如果更新的话 那就不行了,就必须 按照上面方框中所示的代码才可以。
首先我们使用了 $this->route('topic') 这段代码的意思是 我们传递当前编辑文章的路由参数topic 就可以获取到当前文章的模型对象
我们在使用 $this->route('topic')->id 就可以获取到当前编辑的文章的 id了,有了 id 就实现了我们的在编辑文章验证唯一的需求了,
在Laravel 中 我们在更新的时候 验证唯一性 只需要
unique:topics,title,'. $this->route('topic')->id,
后面加入当前模型的 id 表示排除自身的 id 即可。
感谢大家阅读,下次教程见