在文件夹存储库上验证

时间:2019-06-05 19:03:03

标签: php laravel repository repository-pattern

我正在学习Laravel并且被卡住了,实际上我有一个名为Repositories的文件夹StudentRepository

在我的控制器中,我有这个:

public function index(Request $request)
{
   $students = $this->students->getAll();
   return view('admin.students.index', compact('students'));
}

在我的 StudentRepository 中,我有这个:

public function getAll()
{
   return Student::oldest()->paginate(5);
}

到目前为止没有问题...

现在,我想使用validate系统改进我的应用程序。

在我的文件 StudentRepository 中,应将此代码放在下面:

if ($req->has('search') && !empty($req->search)) {

        $validated = $req->validate([
        'search' => 'alpha', 
        ]);

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

在我的文件夹 StudentRepository

中的函数 getAll()
public function getAll()
{   
        return Auteur::orderBy('name', 'ASC')->paginate(5);
}

我真的不明白该遵循的语法吗?

1 个答案:

答案 0 :(得分:3)

  

现在,我想使用validate系统改进我的应用程序。

直接在请求上进行控制器中的验证,这是您可以检查的第一件事,因此,如果验证失败,则不会使用不必要的系统资源。
添加有时规则,该规则仅在存在该字段时才检查该字段。
如果您不希望验证程序将空值视为无效,则可以将其标记为可空。

控制器

public function index(Request $request)
{
    $request->validate([
        'search' => 'sometimes|nullable|alpha', 
    ]);
    // assign the value of the request field to a variable, note that the value will be null if the field doen't exist
    $search = $request->search;

    // pass the variable as parameter to the repository function
    $students = $this->students->getAll($search);

    // If you would like to determine if a value is present on the request and is not empty, you may use the filled method
    if ($request->filled('search')) {
        $students->appends($request->only('search'));
    }

    return view('admin.students.index', compact('students'));
}

StudentRepository

// receives the parameter in the function
public function getAll($search)
{
    // here you can use when() method to make this conditional query, note that if the value is null, the condition will not pass
    return  Student::when($search, function ($query) use ($search) {
                $query->where('name', 'LIKE', '%' . $search . '%');
            })
            ->orderby('name', 'asc')
            ->paginate(5);
}