如何清理 laravel 请求输入?
Posted
技术标签:
【中文标题】如何清理 laravel 请求输入?【英文标题】:How can I sanitize laravel Request inputs? 【发布时间】:2016-04-21 13:50:22 【问题描述】:我有 MyRequest.php
类扩展 App\Http\Requests\Request
。我想在验证之前trim()
每个输入,因为在它之后带有空格的电子邮件没有通过验证。
但是 sanitize()
已从 src/Illuminate/Foundation/Http/FormRequest.php
中删除
【问题讨论】:
【参考方案1】:创建一个抽象的 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 [];
【讨论】:
如果有人在复制/粘贴此答案时遇到问题,很可能是命名空间。【参考方案2】:我刚遇到同样的问题。
我想向您展示另一种不使用extends
而使用traits
的方法。 (我将学习 Tarek Adam 的示例课程)。
PHP Traits 类似于将被注入到使用的类中的函数。一个主要区别是 Trait 不需要像 extends 那样的任何依赖项。这意味着您可以将特征用于不止一个类,例如用于控制器、请求和任何你喜欢的东西。
Laravel 在 BaseController 中提供了一些特性,我们也可以这样做。
如何使用 trait 来做到这一点
在\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 [];
【讨论】:
特征方法提供了更大的灵活性。我建议阅读两个答案以真正理解它。他们有点在一起。以上是关于如何清理 laravel 请求输入?的主要内容,如果未能解决你的问题,请参考以下文章