laravel 判断字符串包含_验证 | 服务 | Laravel 5.1 中文文档

验证

由 学院君 创建于5年前, 最后更新于 8个月前

版本号 #3

1、简介

Laravel提供了多种方法来验证应用输入数据。默认情况下,Laravel的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验证规则来验证输入的HTTP请求。

2、快速入门

要学习Laravel强大的验证特性,让我们先看一个完整的验证表单并返回错误信息给用户的例子。

2.1 定义路由

首先,我们假定在app/Http/routes.php文件中包含如下路由:

// 显示创建博客文章表单...

Route::get('post/create', 'PostController@create');

// 存储新的博客文章...

Route::post('post', 'PostController@store');

当然,GET路由为用户显示了一个创建新的博客文章的表单,POST路由将新的博客文章存储到数据库。

2.2 创建控制器

接下来,让我们看一个处理这些路由的简单控制器示例。我们先将store方法留空:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Controllers\Controller;

class PostController extends Controller{

/**

* 显示创建新的博客文章的表单

*

* @return Response

*/

public function create()

{

return view('post.create');

}

/**

* 存储新的博客文章

*

* @param Request $request

* @return Response

*/

public function store(Request $request)

{

// 验证并存储博客文章...

}

}

2.3 编写验证逻辑

现在我们准备用验证新博客文章输入的逻辑填充store方法。如果你检查应用的控制器基类(App\Http\Controllers\Controller),你会发现该类使用了ValidatesRequests trait,这个trait在所有控制器中提供了一个便利的validate方法。

validate方法接收一个HTTP请求输入数据和验证规则,如果验证规则通过,代码将会继续往下执行;然而,如果验证失败,将会抛出一个异常,相应的错误响应也会自动发送给用户。在一个传统的HTTP请求案例中,将会生成一个重定向响应,如果是AJAX请求则会返回一个JSON响应。

要更好的理解validate方法,让我们回到store方法:

/**

* 存储博客文章

*

* @param Request $request

* @return Response

*/

public function store(Request $request){

$this->validate($request, [

'title' => 'required|unique:posts|max:255',

'body' => 'required',

]);

// 验证通过,存储到数据库...

}

正如你所看到的,我们只是传递输入的HTTP请求和期望的验证规则到validate方法,在强调一次,如果验证失败,相应的响应会自动生成。如果验证通过,控制器将会继续正常执行。

2.3.1 嵌套属性注意事项

如果HTTP请求中包含“嵌套”参数,可以使用“.”在验证规则中指定它们:

$this->validate($request, [

'title' => 'required|unique:posts|max:255',

'author.name' => 'required',

'author.description' => 'required',

]);

2.4 显示验证错误信息

那么,如果请求输入参数没有通过给定验证规则怎么办?正如前面所提到的,Laravel将会自动将用户重定向回上一个位置。此外,所有验证错误信息会自动一次性存放到session。

注意我们并没有在GET路由中明确绑定错误信息到视图。这是因为Laravel总是从session数据中检查错误信息,而且如果有的话会自动将其绑定到视图。所以,值得注意的是每次请求的所有视图中总是存在一个$errors变量,从而允许你在视图中方便而又安全地使用。$errors变量是的一个Illuminate\Support\MessageBag实例。想要了解更多关于该对象的信息,查看其文档。

所以,在我们的例子中,验证失败的话用户将会被重定向到控制器的create方法,从而允许我们在视图中显示错误信息:

Create Post

@if (count($errors) > 0)

@foreach ($errors->all() as $error)

{ { $error }}

@endforeach

@endif

2.5 AJAX请求&验证

在这个例子中,我们使用传统的表单来发送数据到应用。然而,很多应用使用AJAX请求。在AJAX请求中使用validate方法时,Laravel不会生成重定向响应。取而代之的,Laravel生成一个包含验证错误信息的JSON响应。该JSON响应会带上一个HTTP状态码422。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值