原文来自:https://laravist.com/article/15
Laravist是我刚刚上线的Laravel社区,有任何与Laravel相关的问题可以到这里来问我,我会尽力去帮大家解决问题,后期会尝试录制一些视频教程,形式大概是这样的
https://laravist.com/lesson/1
终于要更新这个Laravel系列教程的第七篇了,期间去写了一点其他的东西。
就不说废话了吧,直接进入Form Validation的部分吧。几乎在每一个web应用当中都会有表单,而有表单基本就离不开表单验证。在laravel中,其实可以说是有两种方式来进行表单验证:使用Request和使用Validation。下面将分开讲这两部分的内容,而且我会更着重第一种,也更推荐大家使用第一种进行表单验证:
Request表单验证
为什么说是会把精力都放在讲解第一种验证方式呢?因为个人觉得第一种方式在相同的验证条件下,更加易于维护和可以进行代码重用。而且写代码的形式更适用于Laravel和我个人的使用习惯:可以使用命令行来生成代码。也就是可以使用artisan这个工具:
php artisan make:request StoreArticleRequest
在项目目录下使用artisan的make:request命令就可以生成一个用于表单验证Request类了,这个类我们在这里命名为StoreArticleRequest,你也可以以你自己喜欢的方式来命名,但我还是推荐大家在命名的时候尽量使得名字比较人性化一点,这样会比较对于后期再看代码的时候有很多好处。这个命令生成的文件位于app/Http/Requests/这个文件夹当中,我们打开这个文件来看:
class StoreArticleRequest extends Request{ /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ // ]; }}
实现验证
可以看到里面会有两个方法:authorize()和 rules() 。authorize()可以这样简单地理解:我们在处理这个表单请求(通常是一个post请求)的时候是否是需要进行身份验证,这种验证是指:比如A发表的评论,B能不能进行编辑。如果不能,则保留返回false,如果可以,则修改返回true。那么我们这里的逻辑是:既然是发表文章,在我们这个站点注册的用户(如果开放注册的话)都是可以发表文章的,所以我们首先修改authorize()方法,将其返回值改为:return true;。
然后对于rules()方法,我们需要在这里设置我们的验证规则,比如我们可以设置下面这个的验证规则:
public function rules() { return [ 'title' => 'required', 'content' => 'required' ]; }
因为我们在创建文章的时候,我们会有两个提交过来的字段:title和content。这是我们在设计articles表的时候设置的两个字段。
然后,上面的验证规则是:对于title和content两个字段,我们需要用户为其填充内容,不能为空。
既然这里的规则设置好之后,我们该怎么应用起来呢?也就是我们怎么在将文章存入数据库之前进行验证呢?很简单,我们只需要稍微修改ArticleController的store()方法:
public function store(Requests\StoreArticleRequest $request) { $input = $request->all(); //下面增加两行,顺便看看Request::get的使用 $input['intro'] = mb_substr($request->get('content'),0,64); }
我们将整个StoreArticleRequest类的实例以$request变量传入store()方法,这个时候,laravel
就会自动检查我们是否需要进行表单验证(rules方法有没有定义验证规则),如果有需要验证的话,laravel会首先走验证这条路,如果验证没有通过,store()方法内的代码不会被执行,而是直接跳转到提交表单的页面,这里是:http://blog.dev/article/create 这个页面。如果所有的验证都通过之后,才会执行store()内部的代码,也就是才会执行到$input = $request->all();这里以及往下的代码。。。比如我们来试试留空的时候是什么样的情况:
反馈错误
上面的图片中好像没有什么变化,但其实是已经提交了一次了,但是又马上跳转回来了。我们可以使用下面的方式来验证一下:
@if($errors->any()) <ul class="alert alert-danger"> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul>@endif
在create.blade.php这个视图文件中增加上面的代码,我这里是放在{!! Form::close() !!}后面。这里的意思大概就是,如果有任何表单验证的错误消息,我们就讲这个信息打印出来反馈给用户。如果没有,则不会显示信息。我们再来试一下:
这时候可以看到,我们在表单验证没有通过的时候,在页面显示了相对应的错误信息。如果没有错误,就创建一篇文章。
tips:如果你不想错误信息为英文,可以到resources/lang/en/validation.php修改,或者你直接创建一个新的语言文件包。
多个验证规则
OK,这里,我们基本是将这个这个验证流程走通了。但是,在实际的开发中,我们的验证并不都是这个简单:要是我们要对一个字段设置多个验证规则呢?比如我们希望文章的title最少不能少于三个字节长度呢?我们可以这样,在rules()方法中:
'title' => 'required|min:3',
在laravel中,我们使用|将多个规则分开,:表示规则的值。其实这里你也可以使用数组的,但是我还是推荐大家像上面这样写,简洁明了。
其他常用验证规则
至于更多地验证规则,比如注册的时候,验证一个email和确认密码的时候,我们怎么需要怎么写的呢?
'email'=>'required|email','password'=>'required|min:6|confirmed','password_confirmation' => 'required|min:6'
上面我直接给出这两个常用场景的最常见的写法,email就代表验证所填的信息是否是一个正确地邮箱格式了,至于确认密码就使用confirmed来指定,这里注意是confirmed而不是confirme。而且第二次输入密码的字段需要写成password_confirmation这个形式,也就是在视图中,我们会有类似这样的input表单:
<input type="password" name="password" /><input type="password" name="password_confirmation" />
关于更多验证规则,参考官方文档:
http://laravel.com/docs/5.1/validation
使用Validation
使用这个之前可以将store(Requests\StoreArticleRequest $request)中的变量去掉
使用Validation的时候,多用于验证一些简单的表单验证。这里演示直接写于ArticleController当中,直接使用Validator::make(),使用方式为Validator::make(array $request,array $rules),比如说我们的例子可以在store()中写成:
$input = Request::all();$validator = Validator::make($input, [ 'title' => 'required|min:3', 'body' => 'required',]);
然后可以使用下面这样的方式来检查验证有没有通过:
if ($validator->fails()) { }
验证通过之后,我们才进行下一步操作,比如将数据存入数据库。一个基本的Validation流程就完成了,而且关于Validation的部分,我也只想介绍到这里,因为我会安利大家使用第一种方式:Request。
tips:这两种方式的背后都是使用一样的验证机制。
总结
这里就基本将基础的表单验证说完了,下一节我准说说queryScope和SetAttributes的使用,这两个对于我们的数据入库的预处理和代码重用都很有帮助,所以下次会先说这两个知识点:我们会先对published_at这个字段的设置和使用发挥出来,到时候你就知道设置这个字段的好处了。
最后:Happy Hacking

PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP는 MySQLI 및 PDO 확장 기능을 사용하여 데이터베이스 작업 및 서버 측 로직 프로세싱에서 상호 작용하고 세션 관리와 같은 기능을 통해 서버 측로 로직을 처리합니다. 1) MySQLI 또는 PDO를 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하십시오. 2) 세션 관리 및 기타 기능을 통해 HTTP 요청 및 사용자 상태를 처리합니다. 3) 트랜잭션을 사용하여 데이터베이스 작업의 원자력을 보장하십시오. 4) SQL 주입 방지, 디버깅을 위해 예외 처리 및 폐쇄 연결을 사용하십시오. 5) 인덱싱 및 캐시를 통해 성능을 최적화하고, 읽을 수있는 코드를 작성하고, 오류 처리를 수행하십시오.

PHP에서 전처리 문과 PDO를 사용하면 SQL 주입 공격을 효과적으로 방지 할 수 있습니다. 1) PDO를 사용하여 데이터베이스에 연결하고 오류 모드를 설정하십시오. 2) 준비 방법을 통해 전처리 명세서를 작성하고 자리 표시자를 사용하여 데이터를 전달하고 방법을 실행하십시오. 3) 쿼리 결과를 처리하고 코드의 보안 및 성능을 보장합니다.

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

PHP는 전자 상거래, 컨텐츠 관리 시스템 및 API 개발에 널리 사용됩니다. 1) 전자 상거래 : 쇼핑 카트 기능 및 지불 처리에 사용됩니다. 2) 컨텐츠 관리 시스템 : 동적 컨텐츠 생성 및 사용자 관리에 사용됩니다. 3) API 개발 : 편안한 API 개발 및 API 보안에 사용됩니다. 성능 최적화 및 모범 사례를 통해 PHP 애플리케이션의 효율성과 유지 보수 성이 향상됩니다.

PHP를 사용하면 대화식 웹 컨텐츠를 쉽게 만들 수 있습니다. 1) HTML을 포함하여 컨텐츠를 동적으로 생성하고 사용자 입력 또는 데이터베이스 데이터를 기반으로 실시간으로 표시합니다. 2) 프로세스 양식 제출 및 동적 출력을 생성하여 htmlspecialchars를 사용하여 XSS를 방지합니다. 3) MySQL을 사용하여 사용자 등록 시스템을 작성하고 Password_Hash 및 전처리 명세서를 사용하여 보안을 향상시킵니다. 이러한 기술을 마스터하면 웹 개발의 효율성이 향상됩니다.

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP는 여전히 역동적이며 현대 프로그래밍 분야에서 여전히 중요한 위치를 차지하고 있습니다. 1) PHP의 단순성과 강력한 커뮤니티 지원으로 인해 웹 개발에 널리 사용됩니다. 2) 유연성과 안정성은 웹 양식, 데이터베이스 작업 및 파일 처리를 처리하는 데 탁월합니다. 3) PHP는 지속적으로 발전하고 최적화하며 초보자 및 숙련 된 개발자에게 적합합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

드림위버 CS6
시각적 웹 개발 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는
