Панель поиска только с символами в моем поиске - PullRequest
1 голос
/ 24 апреля 2019

В панели поиска я хотел бы ограничить свой запрос следующим образом: цифры или символы и оставить только символы в моем поиске.Пользователь может только ввести имя в запросе.

Я застрял в своей функции ...

public function index(Request $req){

     if($req->search == ""){
            $students = Student::paginate(5);
           return view('admin.students.index', compact('students'));
     } else {
          $students = Student::where('nom', 'LIKE', '%' .$req->search . '%')
        ->paginate(5);
        $students->appends($req->only('search'));
        return view('admin.students.index', compact('students'));
     }  

    }

Большое спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

HTML5

Сначала защитите свое поле, чтобы дать пользователю немедленную обратную связь с пользователем.В бланке вашей формы:

<input type="text" name="search" value="{{ isset($search) ? $search : '' }}" pattern="[a-zA-Z]+" placeholder="search" />

Проверка

проверка строка поиска для буквенно-цифровой :

$this->validate($reqest,[
    'search' => 'alpha_num',
]);

или просто alpha :

$this->validate($request,[
    'search' => 'alpha',
]);

Более новые версии

Более новые версии ( 5.6 + ), запросы могут проверять себя вместо контроллера, иверните проверенные поля для большей защиты, поэтому то же самое будет выглядеть так:

$data = $request->validate([
    'search'=>'alpha',
]);

Отображение ошибок валидации

Взяв приведенный выше код HTML5 и добавив код в , покажите ошибки валидации, чтобы мы могли видеть, когда происходит ошибка.Мы получаем форму, которая выглядит следующим образом:

<form method="get" action="{{route('student.index')}}">
    <input type="text" name="search" value="{{ isset($search) ? $search : '' }}" pattern="[a-zA-Z]+" placeholder="search" />
    @if ($errors->has('search'))
        <div class="error">{{ $errors->first('search') }}</div>
    @endif
    <input type="submit" />
</form>

Собираем ее вместе

Применяем это к вашему коду:

public function index(Request $request)
{
    $data = $request->validate([
        'search' => 'alpha',
    ]);
    $students = isset($data['search']) ? Student::where('nom','like','%' . $data['search'] . '%')->paginate(5) : Student::paginate(5);
    return view('admin.students.index', compact('students','search'));
}
2 голосов
/ 24 апреля 2019

Вы можете добавить валидацию для alpha символов:

public function index(Request $req)
{
    if ($req->has('search') && !empty($req->search)) {
        // validate here
        $validated = $req->validate([
            'search' => 'alpha', // must be entirely alphabetic characters
        ]);

        $students = Student::where('nom', 'LIKE', '%' . $validated['search'] . '%')->paginate(5);
        $students->appends($req->only('search'));
        return view('admin.students.index', compact('students'));
    }

    $students = Student::paginate(5);
    return view('admin.students.index', compact('students'));
}

Если проверка не пройдена, она сразу же перенаправляется обратно с сообщениями об ошибках, которые необходимо отобразить.


Источник: https://laravel.com/docs/5.8/validation#rule-alpha

альфа
Проверяемое поле должно состоять только из буквенных символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...