Tar*_*dam 6 php forms sanitization request laravel-5
我有MyRequest.php
课程延期App\Http\Requests\Request
.我希望trim()
在验证之前输入每个输入,因为在它之后带有空格的电子邮件不会通过验证.
但是sanitize()
被删除了src/Illuminate/Foundation/Http/FormRequest.php
创建一个抽象的SanitizedRequest类,扩展通常的Request类.
YourRequest类应该扩展您的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;
}
}
Run Code Online (Sandbox Code Playgroud)然后是一个普通的CustomRequest,但是扩展了SanitizedRequest而不是laravel的Request类
class ContactRequest extends SanitizedRequest{
public function authorize(){ return true; }
public function rules(){ return []; }
}
Run Code Online (Sandbox Code Playgroud)
我刚刚遇到同样的问题。
我想向您展示另一种不使用extends
但使用traits
. (我将学习 Tarek Adam 的示例课程)。
PHP Traits就像将被注入到所使用的类中的函数。一个主要区别是 Trait 不需要像扩展那样的任何依赖项。这意味着您可以将特征用于多个控制器、请求和任何您喜欢的类。
Laravel 在 BaseController 中提供了一些特征,我们也可以这样做。
创建一个特征作为\App\Traits\SanitizedRequest.php
. 您可以在任何地方创建它,这并不重要。您必须确保提供正确的名称空间。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在您的请求中,您可以使用带有关键字的特征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 []; }
}
Run Code Online (Sandbox Code Playgroud)