laravel 表单验证实现多个字段组合后唯一

admin3年前PHP教程35

Laravel 表单验证器的几种使用方法

1、使用控制器的 validate 方法进行参数验证


/**
 * 保存一篇新的博客文章。
 *
 * @param Request $request
 * @return Response
 */
public function store(Request $request)
{
  $this->validate($request, [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
  ]);
 
  // 文章内容是符合规则的,存入数据库
}

2、手动创建验证器实例进行验证

使用默认的验证信息


/**
 * 保存一篇新的博客文章。
 *
 * @param Request $request
 * @return Response
 */
public function store(Request $request)
{
  $rules = [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
  ];
  $validator = Validator::make($request->all(), $rules);
  if ($validator->fails()) {
    return redirect('post/create')->withErrors($validator)->withInput();
  }
 
  // 文章内容是符合规则的,存入数据库
}

使用自定义的验证信息


/**
 * 保存一篇新的博客文章。
 *
 * @param Request $request
 * @return Response
 */
public function store(Request $request)
{
  $rules = [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
  ];
  $messages = [
    'title.required' => '请填写文章标题',
    'title.unique' => '文章标题不能重复',
    'title.max' => '文章标题不能超过255个字符',
    'body.required' => '请填写文章内容',
  ];
  $validator = Validator::make($request->all(), $rules, $messages);
  if ($validator->fails()) {
    return redirect('post/create')->withErrors($validator)->withInput();
  }
 
  // 文章内容是符合规则的,存入数据库
}

3、创建表单请求进行验证

创建表单请求文件:php artisan make:request ExampleRequest
表单请求文件内容:


<?php
 
namespace App\Http\Requests;
 
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\JsonResponse;
 
class ExampleRequest extends FormRequest
{
  /**
   * Determine if the user is authorized to make this request.
   *
   * @return bool
   */
  public function authorize()
  {
    return true;
  }
 
  /**
   * Get the validation rules that apply to the request.
   *
   * @return array
   */
  public function rules()
  {
    return [
      'title' => 'required|max:20',
      'name' => ['required', new Uppercase()],
    ];
  }
 
  /**
   * 获取已定义的验证规则的错误消息。
   *
   * @return array
   */
  public function messages()
  {
    return [
      'title.required' => 'A title is required',
      'title.max' => 'The title may not be greater than 20 characters.',
    ];
  }
 
  /**
   * 兼容 form 表单请求与 ajax 请求或者 json api 请求
   * 验证失败,返回错误信息
   *
   * @param Validator $validator
   * @throws
   */
  protected function failedValidation(Validator $validator)
  {
    if ($this->wantsJson() || $this->ajax()) {
      throw new HttpResponseException(
        new JsonResponse([
          'code' => 500,
          'msg' => $validator->errors()->first(),
          'data' => new \stdClass()
        ])
      );
    } else {
      parent::failedValidation($validator);
    }
  }
}

在控制器中使用 ExampleRequest


<?php
 
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use App\Http\Requests\ExampleRequest;
 
class ExampleController extends Controller
{
  public function valid(ExampleRequest $request)
  {
    $params = $request->all();
    dd($params);
  }
}

在laravel 表单验证中,常会遇到需要几个字段组合起来做唯一限制。

解决方案如下:


where[] = ['parentId','=',where[]=[′parentId ′,′ = ′,this->request->get('parentId')];
return [
 
    'menuTitle' => ['required', 'max:32','min:2',Rule::unique('admin_menu','menuTitle')->where(function($query)use($where){
      $query->where($where)->whereNull('deleted_at');
      })->ignore($id) ],
    'menuTitleEn' => ['required', 'max:32','min:2',Rule::unique('admin_menu','menuTitleEn')->where(function($query)use($where){
      $query->where($where)->whereNull('deleted_at');
      })->ignore($id) ],
    'menuRoute' => ['required',Rule::unique('admin_menu','menuRoute')->ignore($id)],
    'menuIcon' => ['required', 'min:2','max:32'],
    'routeName' => ['sometimes', 'min:2','max:32'],
    'parentId' => ['required','numeric'],
    'order'=>['sometimes','numeric']
    
  ];

到此这篇关于laravel 表单验证实现多个字段组合后唯一的文章就介绍到这了,更多相关laravel 表单验证内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

租用国外多ip服务器有哪些优势国外多ip服务器如何选择合适的

租用国外多ip服务器的优势有:1、有利于搜索引擎收录,提高服务器网站内容的收录率;2、稳定性好,不会因为一个网站出现问题而受到影响;3、使用多IP部署网站更加易于维护;4、资源多,能保障网站不间断正常...

高防服务器的流量清洗是什么?国内电信100G高防服务器DOSS高防清洗?

越来越多大型行业网站由于一些的原因会经常被ddos流量攻击,为了确保业务服务和网站的正常执行,所以大家需要租赁专门防护ddos流量攻击的高防服务器。在租赁高防服务器的时候,大家会经常看见一些相关的防护...

10个常见网站安全攻击手段及防御方法?美国高防服务器如何防御网络攻击?

在某种程度上,互联网上的每个网站都容易遭受安全攻击。从人为失误到网络罪犯团伙发起的复杂攻击均在威胁范围之内。网络攻击者最主要的动机是求财。无论你运营的是电子商务项目还是简单的小型商业网站,潜在攻击的风...

PHP之CI框架学习讲解

一、前言CodeIgniter 是一个简单快速的PHP MVC框架。EllisLab 的工作人员发布了 CodeIgniter。CodeIgniter 是一套小巧但功能强大的、给 PHP 网站开发者使...

php安装grpc扩展的具体步骤

1、在php.ini文件中添加grpc扩展配置:extension=grpc.sogit clone -b $(curl -L http://grpc.io/release) github/grpc/...

厦门游戏高防服务器配置怎么选择

厦门游戏高防服务器配置怎么选择?选择适合的游戏高防服务器配置需要考虑以下几个因素:游戏类型:不同类型的游戏对服务器的要求不同,一些大型多人在线游戏(MMORPG)需要更高的带宽和更大的存储空间,而一些...