У меня есть панель поиска в моем учебном проекте. Я включаю его в navbar.blade.php, и когда я тестирую его, я превращаюсь в эту конструкцию URL.

localhost:8890/home?_token=7dKh256Me65Wb0rCvlJWkkk1SKdGrpaRPFCHP7MW&_method=GET&search=test

Но диспетчер не звонит. Мне нужен этот URL, чтобы заставить его работать

localhost:8890/search?_token=7dKh256Me65Wb0rCvlJWkkk1SKdGrpaRPFCHP7MW&_method=GET&search=test

Мой маршрут:

Route::get('search', [App\Http\Controllers\ProductController::class, 'search'])->name('search');

ProductController :

public function search(Request $request)
{
    //Get the search vale from the request
    $search = $request->input('search');

    $products = Product::query()
            ->where('ean', 'LIKE', "%{$search}%")
            ->orWhere('manufacturer', 'LIKE', "%{$search}%")
            ->orWhere('name', 'LIKE', "%{$search}%")
            ->orWhere('productNumber', 'LIKE', "%{$search}%")
            ->orWhere('propertie', 'LIKE', "%{$search}%")
            ->get();

    return view('products.search',compact('products'));
}

Включен navbar-search.blade.php

<!-- Right navbar links -->
<ul class="navbar-nav ml-auto">
    <!-- Navbar Search -->
    <li class="nav-item">
        <a class="nav-link" data-widget="navbar-search" role="button">
            <i class="fas fa-search"></i>
        </a>
        <div class="navbar-search-block">
            <form class="form-inline">
                @csrf
                <div class="input-group input-group-sm">
                    <input type="text" name="search" class="form-control form-control-navbar" placeholder="Search" required>
                    <div class="input-group-append">
                        <form action="{{route('search')}}" method="GET">
                            @csrf
                            @method('GET')
                            <button class="btn btn-navbar" type="submit">
                                <i class="fas fa-search"></i>
                            </button>
                        </form>
                        <button class="btn btn-navbar" type="button" data-widget="navbar-search">
                            <i class="fas fa-times"></i>
                        </button>
                    </div>
                </div>
            </form>
        </div>
    </li>
</ul>
1
AlexLoje 26 Янв 2022 в 12:14
Вам не нужен CSRF для метода GET. Итак... Вам не нужно добавлять @csrf и @method('GET').
 – 
Tra Lee
26 Янв 2022 в 13:52

2 ответа

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

<ul class="navbar-nav ml-auto">
    <!-- Navbar Search -->
    <li class="nav-item">
        <a class="nav-link" data-widget="navbar-search" role="button">
            <i class="fas fa-search"></i>
        </a>
        <div class="navbar-search-block">
            <form class="form-inline" action="{{route('search')}}" method="GET">
                <div class="input-group input-group-sm">
                    <input type="text" name="search" class="form-control form-control-navbar" placeholder="Search" required>
                    <div class="input-group-append">
                        <button class="btn btn-navbar" type="submit">
                            <i class="fas fa-search"></i>
                        </button>
                        <button class="btn btn-navbar" type="button" data-widget="navbar-search">
                            <i class="fas fa-times"></i>
                        </button>
                    </div>
                </div>
            </form>
        </div>
    </li>
</ul>
1
MinhTD 26 Янв 2022 в 12:54

Почему вы создали 2 формы в файле блейда и вам не нужно добавлять директиву @csrf и @method в запрос на получение

-1
Moolchand Sharma 26 Янв 2022 в 12:28
Это должен быть комментарий, а не ответ
 – 
brombeer
26 Янв 2022 в 12:49
Прости. Я забыл это. но я не закончил с этим кодом. он работает локально, а не онлайн. но я изменил его и добавил @csrf в формы. Спасибо
 – 
AlexLoje
26 Янв 2022 в 12:56