如何清理laravel 5.X请求输入?

时间:2016-01-15 21:21:28

标签: php forms laravel-5 request sanitization

我有MyRequest.php课程延长App\Http\Requests\Request。我希望在验证之前trim()每个输入,因为在它之后带有空格的电子邮件不会通过验证。

sanitize()

已移除src/Illuminate/Foundation/Http/FormRequest.php

2 个答案:

答案 0 :(得分:5)

  1. 创建一个抽象的SanitizedRequest类,扩展通常的Request类。

  2. YourRequest类应扩展您的SanitizedRequest抽象类。

  3. 您的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;
        }
    }
    
  4. 然后是一个普通的CustomRequest,但是扩展了SanitizedRequest而不是laravel的Request类

        class ContactRequest extends SanitizedRequest{
            public function authorize(){ return true; }
            public function rules(){ return []; }
        }
    

答案 1 :(得分:2)

我刚遇到同样的问题。
我希望在没有extendstraits的情况下向您展示另一种方法。 (我将从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 []; }
}