Запрос на изменение проверки Laravel перед проверкой. вернуть оригинал, если не удалось

У меня есть редактор WYSIWYG. Когда пользователи продолжают нажимать пробел в редакторе, ввод будет таким.

"<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>"

Чтобы предотвратить это, я изменил all метод в классе Request, подобный этому, для удаления пробелов и тегов.

public function all()
{
$input = parent::all();

$input['body'] = strip_tags(preg_replace('/\s+/', '', str_replace('&nbsp;',"", $input['body'])));
//modify input here

return $input;
}

Это прекрасно работает.

Однако проблема здесь в том, что если другие правила проверки не сработают, возвращаемое значение из old вспомогательная функция модифицируется методом.

Так что, если исходный ввод такой

"""<p>&nbsp;<iframe src="//www.youtube.com/embed/Mb5xcH9PcI0" width="560" height="314" allowfullscreen="allowfullscreen"></iframe></p>\r\n
<p>This is the body.</p>
"""

И если другие правила проверки терпят неудачу, я получаю это как старый ввод.

"Thisisthebody."

Итак, есть ли способ получить исходные входные данные запроса в качестве старых входных данных, когда проверки не пройдены?

Вот моя форма запроса.

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;
use Illuminate\Validation\Factory as ValidationFactory;

class ArticleRequest extends Request
{

public function all()
{
$input = parent::all();

$input['body'] = strip_tags(preg_replace('/\s+/', '', str_replace('&nbsp;',"", $input['body'])));
//modify input here

return $input;
}

/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required|min:3|max:40',
'tags.*' => 'required',
'body'  => 'required|min:50',
//up to 6mb
'thumbnail'=>'image|file|max:10240'
];
}

public function messages()
{
return [
'title.required'  => 'タイトルを入力してください',
'title.min'  => 'タイトルは3文字以上でお願いします',
'title.max'  => 'タイトルは40文字以下でお願いします',
'body.min'  => '本文は50文字以上お書きください',
'body.required'  => '本文を入力してください',
'tags.*.required'  => 'タグを選んでください',
'thumbnail.image'  => '画像の形式はjpeg, bmp, png, svgのいずれかをアップロードできます',
'thumbnail.file'  => 'フォームから画像をもう一度アップロードしてください',
'thumbnail.max'  => 'ファイルは10MBまでアップロードできます',
];
}
}

4

Решение

Создайте собственный валидатор, который удаляет теги, считает символы, но не изменяет сам контент.

Validator::extend('strip_min', function ($attribute, $value, $parameters, $validator) {

$validator->addReplacer('strip_min', function($message, $attribute, $rule, $parameters){
return str_replace([':min'], $parameters, $message);
});

return strlen(
strip_tags(
preg_replace(
'/\s+/',
'',
str_replace('&nbsp;',"", $value)
)
)
) >= $parameters[0];
});

и в вашем validation.php lang file add:

'strip_min' => 'The :attribute must be at least :strip_min characters.'

источник: https://stackoverflow.com/a/33414725/2119863

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector