我有MyRequest.php
课程延长App\Http\Requests\Request
。我希望在验证之前trim()
每个输入,因为在它之后带有空格的电子邮件不会通过验证。
但sanitize()
src/Illuminate/Foundation/Http/FormRequest.php
答案 0 :(得分:5)
创建一个抽象的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;
}
}
然后是一个普通的CustomRequest,但是扩展了SanitizedRequest而不是laravel的Request类
class ContactRequest extends SanitizedRequest{
public function authorize(){ return true; }
public function rules(){ return []; }
}
答案 1 :(得分:2)
我刚遇到同样的问题。
我希望在没有extends
但traits
的情况下向您展示另一种方法。 (我将从Tarek Adam那里学习示例课程。)
PHP Traits就像将被注入已使用类的函数一样。一个主要区别是Trait不需要任何依赖,例如extend do。这意味着你可以使用一个特征,而不只是一个类e.x.对于控制器,请求和您喜欢的任何内容。
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;
}
}
在您的请求中,您可以将该特征与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 []; }
}