如何在Laravel之外使用illuminate组件详解_php实例

来源:脚本之家  责任编辑:小易  

Laravel ValidationLaravel’2113s base controller class use a ValidatesRequests traitapp/Http/routes.php :Route::get(‘post/create’, ‘PostController@create’);Route::post(‘post’, ‘PostController@store’);Controller<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class PostController extends Controller{/*** Show the form to create a new blog post.** @return Response*/public function create(){return view('post.create');}/*** Store a new blog post.** @param Request $request* @return Response*/public function store(Request $request){// Validate and store the blog post...}}// 直接5261在 store 方法4102中,使1653用 base controller 中的 validatesRequests traitpublic function store(Request $request){$this->validate($request, ['title' => 'required|unique:posts|max:255','body' => 'required',]);}只需给 validate 方法,传送 HTTP request 与需要验证规则即可。注意,如果验证失败,自动生成默认的提示。验证通过,控制器就会自动往下执行。第一个验证规则失败,就停止继续往下验证,对该属性适应 bail 规则:$this->validate($request,[‘title’ => ‘bail | required | unique:posts|max:255’,‘body’ => ‘required’]);上面的代码执行时,如果 title 在 required 规则验证没通过,那么 unique 规则将不再被验证。验证规则会被按照指定的顺序来校验。对嵌套属性使用验证规则补充说明如果 HTTP request 包含有嵌套参数,你可以再验证规则中使用 “.” 语法来指定需要校验的参数,如:$this->validate($request, [‘title’ => ‘required|unique:post|max:255’,‘author.name’ => ‘required’,‘author.description’ => ‘required’,]);展示验证后生成的错误提示如前面提及到的,如果参数校验不通过, Laravel 会自动重定向到来源 URL。另外,所有的验证错误就会被自动存入到 session 中。不需要在 GET 路由中将错误信息绑定,Laravel 会自己检测 session,如果有错误就自动绑定到视图中。$errors 变量是 Illuminate\Support\MessageBag 的实例。在这个例子中,验证不通过,用户将会被重定向到控制器的 create 方法。我们就可以在视图中展示错误。<!-- /resources/views/post/create.blade.php -->Create Post@if (count($errors) > 0)<div class="alert alert-danger">@foreach ($errors->all() as $error){{ $error }}@endforeach</div>@endif<!-- Create Post Form -->自定义错误消息提醒格式自定义验证不通过的错误消息,可以通过在基础控制器(base controller)重写 formatValidationErrors。必须要先在文件顶部,引入 Illuminate\Contracts\Validation\Validator 类:<?phpnamespace App\Http\Controllers;use Illuminate\Foundation\Bus\DispatchesJobs;use Illuminate\Contracts\Validation\Validator;use Illuminate\Routing\Controller as BaseController;use Illuminate\Foundation\Validation\ValidatesRequests;abstract class Controller extends BaseController{use DispatchesJobs, ValidatesRequests;/*** {@inheritdoc}*/protected function formatValidationErrors(Validator $validator){return $validator->errors()->all();}}AJAX 请求与参数验证上面例子,是针对使用表单(form)来传送数据给应用,大部分应用使用的是 AJAX 请求。在一个 AJAX 请求中,使用 validate 方法,Laravel 将不会生成重定向响应。相反,Laravel 会生成一个包含验证错误提示的 JSON 响应。该响应会以 422 HTTP 状态码来发送回去给客户端。校验输入字段的数组为数组格式验证在每一个数组中的输入字段是唯一的,只需要$validator = Validator::make($request->all(), ['person..email' => 'email|unique:users','person..first_name' => 'required_with:person.*.last_name',]);同样,在文件中,当你指定验证提示时,可以使用 * 字符。'custom' => ['person.*.email' => ['unique' => 'Each person must have a unique e-mail address',]],自己创建验证器不想要使用 ValidatesRequests trait’s validate 方法,你可以通过使用 Validator facade 来创建一个 validator 实例。make 方法将会生成一个新的验证器实例。<?phpnamespace App\Http\Controllers;use Validator;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class PostController extends Controller{/*** Store a new blog post.** @param Request $request* @return Response*/public function store(Request $request){$validator = Validator::make($request->all(), ['title' => 'required|unique:posts|max:255','body' => 'required',]);if ($validator->fails()) {return redirect('post/create')->withErrors($validator)->withInput();}// Store the blog post...}}make 方法,第一参数是需要校验的数据,第二个参数是对数据进行校验的规则。验证失败之后,可以使用 withErrors 方法来将错误提示存入会话中。同时,$errors 变量可以再跳转后,视图中使用。withErrors 方法接收一个 validator, 一个 MessageBag,或一个 PHP 数组。命名错误提示单个页面有多个表单,你就会想要对错误提示命名,这样你可以指定接收处理某个指定表单的错误信息。只要传送一个名字作为 withErrors 的第二个参数即可。return redirect(‘register’)->withErrors($validator, ‘login’);视图中通过 $errors 变量,来使用 MessageBag 实例:{{ $errors->login->first(‘email’) }}验证后提供的回调处理validator 允许你指定回调函数,在验证完成之后就执行。这可以使你更容易进行深入的校验,甚至可以添加更多的错误提示。只需要使用 validator 实例的 after 方法即可。$validator = Validator::make(...);$validator->after(function($validator) {if ($this->somethingElseIsInvalid()) {$validator->errors()->add('field', 'Something is wrong with this field!');}});if ($validator->fails()) {//}表单请求验证为了应对更加复杂的验证场景,或许你会想要创建一个“ form request”。表单请求就是,自定义包含有验证逻辑的请求类。使用 make:request Artisan 命令行命令 make:request,即可创建一个表单请求类:php make make:request StoreBlogPostRequest生成的类放置在 app/Http/Requests 目录。让我们添加几个验证规则到 rules 方法中:public function rules(){return ['title' => 'required|unique:posts|max:255','body' => 'required',];}要怎么样才能让验证规则执行呢?所有你需要的就是,在对应的控制器方法中指定 request (type-hint the request on your controller method)。在控制器方法被调用前,输入的表单请求会先被验证,这就意味着你不需要将控制器代码与数据校验代码混在一起了。public function store(StoreBlogPostRequest $request){// The incoming request is valid...}验证失败,会有重定向响应,使用用户返回到来源 URL。错误提示会被保存到 session,可以直接在视图中进行使用展示。如果请求是 AJAX, 返回 JSON 格式的验证错误提示,响应的HTTP状态码为 422 。表单请求授权表单请求类中,有 authorise 方法。在这个方法里面,你可以判断授权用户是否有权限去更新一个指定的资源。如:一名用户想要更新一篇文章的评论,那需要检查他们是否就是该评论的所有者。代码:public function authorize(){$commentId = $this->route('comment');return Comment::where('id', $commentId)->where('user_id', Auth::id())->exists();}通过使用 route 方法来访问在路由中定义的 URI 参数,例如:{comment} 参数定义如下:Route::post(‘comment/{comment}’);如果 authorise 方法返回 false,状态码为 403 的响应会自动返回,控制器方法将不会被执行。如果你想要,在应用的其他部分使用用户授权验证逻辑,只需要在 authorize 方法中返回 true 就好了。自定义错误提示格式如果你想要自定义验证失败后的错误提醒,只需要在 request 基类(App\Http\Requests\Request)中重写 formatErrors 方法。记得要在类文件顶部引入 Illuminate\Contracts\Validation\Validator。protected function formatErrors(Validator $validator){return $validator->errors()->all();}自定义错误提示内容在表单请求类(app/Http/Requests/LightPostRequest.php)中,重写 message 方法。该方法必须要返回一个属性/规则对,与对应的错误的消息。public function messages(){return ['title.required' => 'A title is required','body.required' => 'A message is required',];}使用错误提示信息通过调用 Validator 实例的 errors 方法,你就可以使用 Illuminate\Support\MessageBag 实例,该实例提供一系列的便捷方法来操作错误提示信息。使用一个字段的第一条错误信息提取一个指定字段的第一条错误信息,使用 first 方法“$message = $validator->error();echo $message->first(‘email’);提取一个字段的所有错误信息$message->get(“email”);foreach ($messages->get('email') as $message) {//}提取所有字段的错误信息$message->all();foreach ($messages->all() as $message) {//}判断某个字段时候存在错误信息if ($messages->has('email')) {//}通过一个格式来提取错误提示echo $message->first(‘email’, ‘:message’);通过一个格式提取所有错误提示foreach($message->all(‘:message’) as $message) {}www.zgxue.com防采集请勿采集本网。

当代框架基本都是有组件构成,这使得框架变得更加灵活。The Laravel Components | github Laravel 中有不少优质组件,那如何在 Laravel 之外使用 illuminate 组件呢?

安装composer 在想安装的目录内执行 composer create-project laravel/laravel=4.1.* your-project-name --prefer-dist 其中your-project-name为你的项目名

illuminate/validation

安装 illuminate/database根据自己使用的 PHP 版本,通过 composer 安装对应的 illuminate/database 版本,例如 composer require illuminate/database:5.3.* 接入到 TP 中 在 ThinkPHPLibraryThinkThink.class.php 文件中的 start方法的最后一

illuminate/validation 为例,validation 有丰富的数据验证功能。

1、如果你用过smarty模板引擎、MVC类似框架如tp,那么你自己写一个框架噢!2、你要对php的继承实现以及其中的小知识点熟知;3、先列出你的框架目录,什么地方放什么,然后写你的配置文件4、用到的高频函数有:require、require_once、file_exite

在项目的 composer.json 文件中添加:

根据你的描述明显应该是放在 web.php 中。 因为你只是普通的 web 项目,web.php 中的路由使用了 web middleware group 。 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illum

... "require": { ... "illuminate/validation": "^5.8",...

Facade 布局是在面向对象编程中经常使用的一种软件设计布局方式。Facade 实际上是一种包括复杂函数库的类,提供了更加简洁易读的接口。Facade 布局还能为一组结构复杂、设计简陋的 API 提供统一、设计周到的 API。 Laravel 框架与该布局的特点相

Laravel-Lang/lang 项目中复制需要的语言文件放到自己的项目中。

例如:在 Yii2 项目中,复制对应语言文件到项目中的 assets/lang/zh-CN/validation.php。

创建 common/Validator.php:

namespace app\common;use Illuminate\Filesystem\Filesystem;use Illuminate\Translation\FileLoader;use Illuminate\Translation\Translator;use Illuminate\Validation\Factory;class Validator{ private static $instance = null; private function __construct() { } public static function getInstance(): Factory { if (null === static::$instance) { $translationPath = get_alias('@assets/lang'); $translationLocale = 'zh-CN'; $transFileLoader = new FileLoader(new Filesystem(), $translationPath); $translator = new Translator($transFileLoader, $translationLocale); static::$instance = new Factory($translator); } return static::$instance; }}

在全局函数文件添加:

// https://learnku.com/docs/laravel/5.8/validation/3899#manually-creating-validators// $rules = [// 'name' => 'required|string|min:2|max:5',// 'code' => 'required|string|min:2|max:5',// ];function validator(array $data, array $rules, array $messages = [], array $customAttributes = []){ return \app\common\Validator::getInstance()->make($data, $rules, $messages, $customAttributes);}

测试使用:

$rules = ['name' => 'required|numeric'];$customAttributes = ['name' => 'My name'];$messages = ['name.required' => 'A name is required',];$validator = validator($data, $rules, $customAttributes, $messages);if ($validator->fails()) { $errors = $validator->errors()->all(); Response::error(Errors::ParamsInvalid, implode(',', $errors), $errors);}

总结

到此这篇关于如何在Laravel之外使用illuminate组件的文章就介绍到这了,更多相关Laravel之外使用illuminate组件内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

#app/config/view.php'pagination' => 'my_pagination'#app/views/my_pagination.php<?php$presenter = new Illuminate\Pagination\BootstrapPresenter($paginator);?><?php if ($paginator->getLastPage() > 1): ?><div class="pagination"><ul><?php/* How many pages need to be shown before and after the current page */$showBeforeAndAfter = 3;/* Current Page */$currentPage = $paginator->getCurrentPage();$lastPage = $paginator->getLastPage();/* Check if the pages before and after the current really exist */$start = $currentPage - $showBeforeAndAfter;/*本回答被提问者采纳内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 一文掌握php xdebug 本地与远程调试(小结)
  • php根据年月获取季度的方法
  • php实现按文件名搜索文件的远程文件查找器
  • php dos攻击实现代码(附如何防范)
  • php按百分比生成缩略图的代码分享
  • php封装分页函数实现文本分页和数字分页
  • laravel 框架结合关联查询 when()用法分析
  • 基于php实现微信小程序客服消息功能
  • symfony2实现从数据库获取数据的方法小结
  • php微信公众号js-sdk开发应用
  • 如何脱离Laravel独立使用illuminate/pagination分...
  • 如何使用 Laravel 框架的 validator
  • 如何在laravel blade中写原生php代码
  • 类中私有方法其它类如何调用 php laravel
  • 如何在laravel框架中引入第三方类库
  • 如何在 ThinkPHP 中整合 Laravel Eloquent ORM
  • laravel 框架 视图 里面怎么用php函数
  • 如何在Laravel Web程序里面调用自己的API
  • 如何使用 Laravel Facades
  • 如何使用 Laravel 框架的 validator
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程php实例一文掌握php xdebug 本地与远程调试(小结)php根据年月获取季度的方法php实现按文件名搜索文件的远程文件查找器php dos攻击实现代码(附如何防范)php按百分比生成缩略图的代码分享php封装分页函数实现文本分页和数字分页laravel 框架结合关联查询 when()用法分析基于php实现微信小程序客服消息功能symfony2实现从数据库获取数据的方法小结php微信公众号js-sdk开发应用php获取数组长度的方法(有实例)微信公众平台实现获取用户openid教你如何使用php session使用php生成二维码的两种方法(带php发送get、post请求的6种方法简php中把stdclass object转array的微信公众平台网页授权获取用户基laravel框架数据库curd操作、连贯php删除数组中空值的方法介绍php错误allowed memory size of php分页思路以及在zf中的使用php实现图片批量打包下载功能yii2.0使用阿里云oss的sdk上传图片、下载php输出英文时间日期的安全方法(rfc 112php实现mysql数据库分表分段备份php+ajax 投票器功能详解将数据从laravel传送到vue的四种方式php输出九九乘法表代码实例yii框架的布局文件实例分析laravel migrate初学常见错误的解决方法
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved