Это потому, что вы делаете post request
и пытаетесь получить route parameter
. измените это
$name = $request->get('product-name');
на
$request->'product_name'
или
$request->only('product_name')
, а также измените название продукта на procductName
или product_name
не использовать -
используйте _
или camel case
То, что вы пытаетесь сделать, нужно сделать, как показано ниже
http://localhost/meals/store?product-name="abc";
, если вам нравится, ваш код будет работать
$name = $request->get('product-name');
return $name; // will return abc
Также добавьте подтверждение к вашему запросу, как показано ниже
Контроллер:
public function search(Request $request)
{
$this->validate($request, ['product_name' => 'required'])
$name = $request->get('product-name');
Debugbar::info($name);
$result = DB::table('products')->select(array('id', 'name'))->where('name', 'LIKE', '%' . $name . '%')->limit(25)->get();
return response()->json($result->toJson());
}
Файл Blade:
<form method="post" action="{{ route('meals.store') }}" class="container-form">
@csrf
<label for="date">Nazwa produktu:</label>
<input name="product-name" type="text" id="product-name" required/>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</form>
Еще одна вещь, если вы видите, что ваш jquery script
вы проходите term as body data
с value
из product-name
измените это:
data: {
term: request.term
},
на:
data: {
product_name: request.term
},
или вы можете изменить $request->product_name
в контроллере на $request->term
Надеюсь, это поможет.
Спасибо