【问题标题】:How to make get route that contain special character in Laravel如何在 Laravel 中获取包含特殊字符的路线
【发布时间】:2019-01-14 16:55:14
【问题描述】:

我想使用 get 方法提交表单,然后从 URL 获取参数并对其进行处理。但我不知道如何生成我的路线。它一直显示错误Sorry, the page you are looking for could not be found. 所以 URL 应该是这样的:search/?q=something。我想从 URL 获取 something 并使用它进行数据库查询。

web.php:

Route::get('/search/?q={query}', 'MoviesController@search');

MoviesController.php

 public function search($query)
    {
        $this->validate($query, [
            'search' => 'required'
        ]);
        $search = Movie::where('name', 'like', '%' . $query. '%')->get();

        return view('inc.search')->with('search', $search);
    }

HTML

<form action="/search" method="GET">
    {{-- @csrf --}}
    <input type="text" name="q" placeholder="search">
    <input type="submit">
</form>

我什至不知道我的 HTML 部分是真是假!

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    ?q={query} 你的路由定义中不需要它,因为我很确定这是定义路由参数的无效方式。替换

    public function search($query){
      $this->validate($query, [
        'search' => 'required'
      ]);
    

    public function search(Request $request){
      $this->validate($request->all(), [
        'q' => 'required'
      ]);
    
      $search = Movie::where('name', 'like', '%' . $request->input("q"). '%')->get();
    

    并确保use Illuminate\Http\Request; 位于MoviesController 的顶部。

    【讨论】:

    • 是的,它有效。顺便说一句,在有 GET 方法的表单中我不需要 @csrf?
    • 正确;只有POST 需要 CSRF。检查中间件app/Http/Middleware/VerifyCsrfToken.php 看看逻辑。
    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2020-08-26
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    相关资源
    最近更新 更多