如何在 $request 对象上使用 Laravel 5 HTML 净化器?

How to use Laravel 5 HTML Purifier on $request object?

我正在使用 HTMLPurifier for Laravel 5 包来清理我的输入字段。目前我的store()方法是这样的:

public function store(Request $request)
{
    // Some business logic goes here

    $post = Post::create($request->all());

    // More business logic
}

我的 $request 变量包含这些:

{
  "_token": "zbyUnJuAbSliem40B6xjWJfGOayoFlRSVIvrDlDM",
  "title": "Test Title",
  "slug": "test-title",
  "category_id": "1",
  "tags": [
    "2"
  ],
  "body": "<p>Test body.</p>"
}

如何在 $request 变量上使用 Purifier::clean() 方法来仅净化 $request->body 元素?

如果我使用 Purifier::clean($request->all()) 然后它将 <p> 标记添加到 $request 对象的所有元素而不是像这样只添加 body 元素:

{
  "_token": "<p>zbyUnJuAbSliem40B6xjWJfGOayoFlRSVIvrDlDM</p>",
  "title": "<p>Test Title</p>",
  "slug": "<p>test-title</p>",
  "category_id": "<p>1</p>",
  "tags": [
    "<p>2</p>"
  ],
  "body": "<p>Test body.</p>"
}

对请求使用merge方法:

$request->merge(['body' => Purifier::clean($request->get('body')]);

编辑

我打算在上面使用 ->merge 而不是 ->replace

你能试试这个吗:

Purifier::clean($request->get('body'));

OK 我得到答案了,可以通过以下方式完成:

public function store(Request $request)
{
    // Some business logic goes here

    $request->merge(['body' => Purifier::clean($request->get('body'))]);
    $post = Post::create($request->all());

    // More business logic
}

在您的 Post 模型中,您可以执行以下操作...

public function setBodyAttribute($value)
{
    $this->attributes['body'] = Purifier::clean($value);
}

这样您就不必在每次创建新的 post.

时都重复执行相同的逻辑。