搜索栏仅包含我搜索中的字符

时间:2019-04-24 19:48:08

标签: laravel

在搜索栏中,我希望将请求限制为:数字或符号,并且仅保留字符。用户只能在请求中输入名称。

我陷入了自己的职能...

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 个答案:

答案 0 :(得分:2)

您可以添加一个仅包含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'));
}

如果验证失败,它将立即重定向回您需要显示的错误消息。


来源:enter image description here

  

alpha
  验证中的字段必须完全是字母字符。

答案 1 :(得分:2)

HTML5

首先保护您的字段,以向用户提供即时反馈给用户。在表单刀片中:

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

验证

validatealpha numeric的搜索字符串:

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

或仅alpha

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

较新版本

较新的版本(5.6+),请求可以验证自己而不是控制器,并返回经过验证的字段以提供更多保护,因此相同的外观如下:

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

显示验证错误

接受上面的HTML5输入并将代码添加到show validation errors中,以便我们可以看到何时出现错误。我们得到一个看起来像这样的表格:

<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'));
}