页面载入中...

当前位置:首页 > 技术资料 > php相关 > php相关

php使用curl模拟浏览器表单上传文件或者图片的方法

温馨提示:本信息由会员搜集整理发布,您如有异议可以 举报 或者 版权申诉
前言 在浏览器使用html中的input框我们可以实现文件的上传,表单元素选用 <input type="file"> 控件,form 表单需要设置 enctype="multipart/form-data" 属性。比如:<body> <form action="UploadFile.php" m

web 开发过程中经常会需要进行参数验证,laravel 中我们常用 validator 或者 request 这两种方法来进行验证,但是这两种验证都不是很方便进行自定义提示信息,自定义验证规则,所以下面来介绍一种很方便的用法:

新建抽象类

<?phpnamespace App/Http/Validators;use Validator;abstract class AbstractValidator{ /**  * Validator  *  * @var /Illuminate/Validation/Factory  */ protected $validator; /**  * Validation data key => value array  *  * @var array  */ protected $data = array(); /**  * Validation errors  *  * @var array  */ protected $errors = array(); /**  * Validation rules  *  * @var array  */ protected $rules = array(); /**  * Validation messages  *  * @var array  */ protected $messages = array(); /**  * Validation codes  *  * @var array  */ protected $codes = array(); public function __construct(array $data) {  $this->data = $data;  $this->before();  $this->validator = Validator::make($this->data, $this->rules, $this->messages);  $this->after(); } /**  * Set data to validate  *  * @return validator  */ public function getValidator() {  return $this->validator; } /**  * Set data to validate  *  * @return $this  */ public function with(array $data) {  $this->data = $data;  $this->before();  $this->validator = $this->validator->make($this->data, $this->rules, $this->messages);  $this->after();  return $this; } /**  * Validation passes or fails  *  * @return boolean  */ public function passes() {  if ($this->validator->fails()) {   $this->errors = $this->validator->messages();   return false;  }  return true; } /**  * Return errors, if any  *  * @return array  */ public function errors() {  return $this->errors; } /**  * Return errors codes, if any  *  * @return array  */ public function getCodes() {  return $this->codes; } /**  * getRules  *  * @return array  */ public function getRules() {  return $this->rules; } /**  * getData  *  * @return array  */ public function getData() {  return $this->data; } /**  * getErrors  *  * @return array  */ public function getErrors() {  return $this->errors; } /**  * getMessages  *  * @return array  */ public function getMessages() {  return $this->messages; } /**  * setRule  *  * @param string $key  * @param string $value  *  * @return $this  */ public function setRule($key, $value) {  $this->rules[$key] = $value;  return $this; } /**  * emptyRules  *  * @return $this  */ public function emptyRules() {  $this->rules = array();  return $this; } /**  * sometimes  *  * @param string  $attribute  * @param string|array $rules  * @param callable  $callback  *  * @return $this  */ public function sometimes($attribute, $rules, callable $callback) {  $this->validator->sometimes($attribute, $rules, $callback);  return $this; } /**  * resolver  *  * @param Closure $resolver  *  * @return $this  */ public function resolver(Closure $resolver) {  Validator::resolver($resolver);  return $this; } /**  * replacer  *  * @param Closure $resolver  *  * @return $this  */ public function replacer($replace, Closure $resolver) {  Validator::replacer($replace, $resolver);  return $this; } /**  * extendImplicit  *  * @param Closure $resolver  *  * @return $this  */ public function extendImplicit($extendImplicit, Closure $resolver) {  Validator::extendImplicit($extendImplicit, $resolver);  return $this; } /**  * extend  *  * @param string   $rule  * @param /Closure|string $extension  * @param string   $message  *  * @return $this  */ public function extend($rule, $extension, $message = null) {  Validator::extend($rule, $extension, $message);  return $this; } /**  * before (extend(),resolver())  *  * @return $this  */ public function before() { } /**  * after(sometimes())  *  * @return $this  */ public function after() { }}

新建中间件

<?phpnamespace App/Http/Middleware;use Closure;use /Illuminate/Http/Request;class ValidateAdminMiddleware{ /**  * This namespace is applied to the controller routes in your routes file.  *  * In addition, it is set as the URL generator's root namespace.  *  * @var string  */ protected $namespace = 'App/Http/Validators'; /**  * Handle an incoming request.  *  * @param /Illuminate/Http/Request $request  * @param /Closure     $next  *  * @return mixed  */ public function handle(Request $request, Closure $next, $validator = null) {  if ($request->isMethod('POST')) {   $type = $request->segment(1);   if ($validator) {    $validator = $this->namespace . '//' . studly_case($type) . '//' . studly_case($validator) . 'Validator';    $validator = new $validator($request->all());    if (!$validator->passes()) {     if ($request->isAjax()) {      return $validator->errors()->first();     } else {      return redirect()->back()      ->withErrors($validator->getValidator())      ->withInput();     }    }   }  }  return $next($request); }}

新建 TestTestValidator

<?phpnamespace App/Http/Validators/Admin;use App/Http/Validators/AbstractValidator;class TestValidator extends AbstractValidator{ /**  * Validation rules  *  * @var Array  */ protected $rules = array(  'name' => ['required', 'test', 'min:1'], ); /**  * Validation messages  *  * @var Array  */ protected $messages = array(  'name.required' => '必填',  'name.min' => '最少1个字符',  'name.test' => '测试', ); /**  * 自定义验证规则或者扩展Validator类  */ public function before() {  $this->extend('test', function ($attribute, $value, $parameters) {   return bool;  }); }}

路由中如何使用

Route::post('/', ['middleware' => ['valiAdmin:Test'], 'uses' => 'IndexController@test']);

具体使用可以自行配置~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持金聪精品

  

延伸阅读:

    无相关信息
  
 

php使用curl模拟浏览器表单上传文件或者图片的方法