【问题标题】:Laravel5 - how to correctly write route for search query string?Laravel5 - 如何正确编写搜索查询字符串的路线?
【发布时间】:2017-03-29 19:15:23
【问题描述】:

我正在开发一个应用程序,我应该在其中对包含用户的表执行搜索。但是,我无法弄清楚如何正确组合路线以便将视图与控制器连接并返回。我的代码如下: 观点:

<form action='{{url(' users')}}' method='GET'>
<input class='form-control' type="text" name="keyword" placeholder="Search for user...">
</form>

路线:

Route::get('users?keyword={$keyword}', 'UsersController@search');

UsersController 中的 search():

public function search()
{
    $keyword = Request::get('keyword');

    $users = User::where("username", "LIKE","%$keyword%")
            ->orWhere("firstname", "LIKE", "%$keyword%")
            ->orWhere("lastname", "LIKE", "%$keyword%")
            ->orWhere("email", "LIKE", "%$keyword%")
            ->orWhere("phone", "LIKE", "%$keyword%")->get();

    return view('search', compact('users'));

}

谁能告诉我正确的语法是什么?提前致谢!

【问题讨论】:

    标签: php mysql laravel search laravel-5


    【解决方案1】:

    你的路线应该是:

     Route::get('users', 'UsersController@search');
    

    在您的控制器中,您可以使用请求对象的get 函数获取查询参数,您已经在执行此操作。

    您可以通过以下任何函数获取参数:

    request()->get('keyword');
    request()->input('keyword');
    request()->query('keyword');
    

    更新

    在文件顶部添加以下导入:

    use Illuminate\Http\Request;
    

    然后在你的控制器函数中注入它:

    public function search(Request $request)
    {
        $keyword = $request->input('keyword');
        // or
        $keyword = $request->query('keyword');
    
        // rest of the code
    }
    

    【讨论】:

    • 然后它给出以下内容: get() 缺少参数 1,在第 120 行的 /Users/eak/Sites/laravel-exercise/app/Http/Controllers/UsersController.php 中调用并定义。
    • 你在用这个Request::get('keyword'),对吧?
    • 是的,$keyword = Request::get('keyword');如上所述。
    • 你可以试试这个request()-&gt;query('keyword');
    • 调用未定义的方法 Illuminate\Support\Facades\Request::query()
    【解决方案2】:

    试试这个:

      Route::get('users', 'UsersController@search');
    

    控制器

    public function search(Request $request) {
        $keyword = $request->get('keyword');
    
        $users = User::where("username", "LIKE","%$keyword%")
                ->orWhere("firstname", "LIKE", "%$keyword%")
                ->orWhere("lastname", "LIKE", "%$keyword%")
                ->orWhere("email", "LIKE", "%$keyword%")
                ->orWhere("phone", "LIKE", "%$keyword%")->get();
    
        return view('search', compact('users'));
    }
    

    【讨论】:

    • 我收到一个错误:调用未定义的方法 Illuminate\Support\Facades\Request::get()
    • @sklrboy use Illuminate\Http\Request; 在命名空间后添加。
    • 现在我的问题变成了,Route::get('users', 'UsersController@search');总是将我重定向到搜索结果,而不是用户主页,哈哈。我是否应该创建另一个控制器,或者在这种情况下有什么专业的解决方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多