Я пытаюсь создать простую функцию поиска. Ниже моя форма поиска

<form  class=" my-1 col-12 col-lg-8" action="{{ 'site-search' | page }}" method="POST">
  <input name="q" class="form-control form-control-sm shadow rounded" type="search" placeholder="What are you sourcing for?" aria-label="Search">  
  <button style="display: none;" type="submit"> Search</button>
</form>

А затем мой запрос

public function onStart(){
    $search = Input::get('q');
    $this['siteSearch'] = Advert::where('title', 'LIKE', '%' . $search . '%')->get();
}

Затем отобразить

{% for siteSearch in search %}
  {{ search.title }}
{% endfor%}

Кажется, он не получает входное значение, потому что, если я попробую что-то вроде

dd($this['siteSearch'] = Buy::where('title', 'LIKE', '%' . 'shoes' . '%')->get());

Возвращает результаты, подходящие для обуви. Что здесь может быть не так?

1
dark 30 Окт 2019 в 16:02
1
Это shoes или $shoes ?
 – 
Danyal Sandeelo
30 Окт 2019 в 16:04
Извиняюсь. 'туфли'. Это просто, чтобы посмотреть, работает ли это
 – 
dark
30 Окт 2019 в 16:08
Input::all() не могли бы вы сбросить это и поделиться результатом, когда попытаетесь опубликовать поисковый запрос dd(Input::all());
 – 
Hardik Satasiya
31 Окт 2019 в 11:20

2 ответа

Просто простая ошибка. это

{% for search in siteSearch %}
{{ search.title }}
{% endfor%}

Вместо этого

{% for siteSearch in search %}
{{ search.title }}
{% endfor%}
0
dark 30 Окт 2019 в 16:15

В вашей функции onStart отсутствует параметр Request $request, который должен сопровождать все запросы POST. В верхней части контроллера добавьте:

use Illuminate\Http\Request;

Затем переопределите свою функцию как:

public function onStart(Request $request)

Затем получите параметр поиска через:

$search = $request->input('q');

Input::get() используется для доступа к массиву PHP $_GET[], но поскольку это запрос POST, вам необходимо правильно получить доступ к вводу формы с помощью класса Request.

Полный пример:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ExampleController extends Controller {
  public function onStart(Request $request){
    $search = $request->input('q');
    $this['siteSearch'] = Advert::where('title', 'LIKE', '%' . $search . '%')->get();
  }
}    
0
Tim Lewis 30 Окт 2019 в 17:47
Хм, вы отправили ответ laravel :) может быть, он хотел сделать это с помощью October-Cms
 – 
Hardik Satasiya
31 Окт 2019 в 11:19
О, возможно, ты прав. Я знаю, что October построен на основе Laravel, но возможно, что он не использует подход Request для отправки форм. Однако для подтверждения придется подождать от них обратной связи.
 – 
Tim Lewis
31 Окт 2019 в 18:24