Php 如何清理laravel请求输入?
我有Php 如何清理laravel请求输入?,php,laravel,forms,request,sanitization,Php,Laravel,Forms,Request,Sanitization,我有MyRequest.php类扩展App\Http\Requests\Request。我想在验证之前对每个输入进行trim(),因为在验证之后带有空格的电子邮件无法通过验证 但是,sanitize()已从src/illumb/Foundation/Http/FormRequest.php中删除 创建一个抽象的SanitizedRequest类,该类扩展了通常的请求类 请求类应该扩展SanitizedRequest抽象类 您的SanitizedRequest类会像这样重写Request::all
MyRequest.php
类扩展App\Http\Requests\Request
。我想在验证之前对每个输入进行trim()
,因为在验证之后带有空格的电子邮件无法通过验证
但是,sanitize()
已从src/illumb/Foundation/Http/FormRequest.php中删除
创建一个抽象的SanitizedRequest类,该类扩展了通常的请求类
请求类应该扩展SanitizedRequest抽象类
您的SanitizedRequest类会像这样重写Request::all()
namespace App\Http\Requests\Forms;
use App\Http\Requests\Request;
abstract class SanitizedRequest extends Request{
private $clean = false;
public function all(){
return $this->sanitize(parent::all());
}
protected function sanitize(Array $inputs){
if($this->clean){ return $inputs; }
foreach($inputs as $i => $item){
$inputs[$i] = trim($item);
}
$this->replace($inputs);
$this->clean = true;
return $inputs;
}
}
然后是一个普通的CustomRequest,但扩展SanitizedRequest而不是laravel的请求类
class ContactRequest extends SanitizedRequest{
public function authorize(){ return true; }
public function rules(){ return []; }
}
我只是遇到了同样的问题。
我想向您展示另一种不使用extends
但使用traits
的方法。(我将以Tarek Adam的示例类为例)
PHP类似于将被注入到所用类中的函数。一个主要的区别是,一个特征不需要像一个扩展对象那样依赖。这意味着您可以将一个特性用于多个类,而不仅仅是一个类e.x。用于控制器、请求和任何您喜欢的内容
Laravel在BaseController中提供了一些特性,我们也可以这样做
如何利用一种特质来做到这一点
在\App\Traits\SanitizedRequest.php
中创建一个trait作为文件。你可以在任何地方创建它,其实并不重要。您必须确保提供正确的命名空间
namespace App\Trait;
trait SanitizedRequest{
private $clean = false;
public function all(){
return $this->sanitize(parent::all());
}
protected function sanitize(Array $inputs){
if($this->clean){ return $inputs; }
foreach($inputs as $i => $item){
$inputs[$i] = trim($item);
}
$this->replace($inputs);
$this->clean = true;
return $inputs;
}
}
在您的请求中,您可以将trait与use SanitizedRequest
关键字一起使用
namespace App\Http\Requests\Forms;
use App\Http\Requests\Request;
use App\Trait\SanitizedRequest; // Import the Trait
class ContactRequest extends Request {
use SanitizedRequest; // This line adds all the Trait functions to your current class
public function authorize(){ return true; }
public function rules(){ return []; }
}
如果有人在复制/粘贴这个答案时遇到问题,很可能是名称空间。trait方法提供了更大的灵活性。我建议阅读这两个答案来真正理解它。他们有点合得来。