Что не так с моим кодом? Это javascript или контроллер?
вот мой маршрут:
Route::get('/cartupdate', 'FrontEndController@cartupdate')->name('update.cart');
Route::post('/cartupdate', 'FrontEndController@cartupdate')->name('cart.update');
Код контроллера здесь:
public function cartupdate(Request $request)
{
if ($request->isMethod('post')){
if (empty(Session::get('uniqueid'))){
$cart = new Cart;
$cart->fill($request->all());
Session::put('uniqueid', $request->uniqueid);
$cart->save();
}else{
$cart = Cart::where('uniqueid',$request->uniqueid)
->where('product',$request->product)->first();
//$carts = Cart::where('uniqueid',$request->uniqueid)
//->where('product',$request->product)->count();
if (count($cart) > 0 ){
$data = $request->all();
$cart->update($data);
}else{
$cart = new Cart;
$cart->fill($request->all());
$cart->save();
}
}
return response()->json(['response' => 'Successfully Added to Cart.','product' => $request->product]);
}
$getcart = Cart::where('uniqueid',Session::get('uniqueid'))->get();
return response()->json(['response' => $getcart]);
}
Код jQuery находится здесь:
$(".to-cart").click(function(){
var formData = $(this).parents('form:first').serializeArray();
$.ajax({
type: "POST",
url: '{{route("cart.update")}}',
data:formData,
success: function (data) {
getCart();
$.notify(data.response, "success");
},
error: function (data) {
console.info('Error:', data);
}
});
});
Код просмотра здесь:
<form>
<p>
{{csrf_field()}}
@if (Session::has('uniqueid'))
<input type = "hidden" name = "uniqueid" value = "{{Session::get('uniqueid')}}">
@else
<input type = "hidden" name = "uniqueid" value = "{{str_random(7)}}">
@endif
<input type = "hidden" name = "title" value = "{{$product->title}}">
<input type = "hidden" name = "product" value = "{{$product->id}}">
<input type = "hidden" id = "cost" name = "cost" value = "{{$product->price}}">
<input type = "hidden" id = "quantity" name = "quantity" value = "1">
@if ($product->stock != 0 || $product->stock === null )
<button type = "button" class = "button style-10 to-cart">Add to cart</button>
@else
<button type = "button" class = "button style-10 to-cart" disabled>Out Of Stock</button>
@endif
{{--<button type = "button" class = "button style-10 hidden-sm to-cart"><i class = "fa fa-shopping-cart"></i>Add to cart</button>--}}
</p>
</form>
Проверьте свой журнал storage/logs или проверьте журнал ошибок сервера. Ошибка 500 является очень общей ошибкой и не объясняет, что происходит не так.
Я получил эту ошибку в Laravel.log # 50 D:\xampp\htdocs\glutax9gs\project\vendor\laravel\framework\sRC\Illuminate\Foundation\Http\Kernel.php(116): Illuminate\Foundation \Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #51 D:\xampp\htdocs\glutax9gs\index.php(53): Illuminate\Foundation\Http\Kernel->handle( Object(Illuminate\Http\Request)) #52 {main}
Это лишь очень небольшая часть трассировки стека. Вы ищете точную ошибку.
То, как вы создаете объекты Cart, нарушает DI и шаблон MVC. Лучше делегировать эту работу другому классу (не контроллеру) и использовать что-то вроде Cart::firstOrCreate или Cart::create в зависимости от случая.
ErrorException: count(): параметр должен быть массивом или объектом, который реализует Countable в D:\xampp\htdocs\glutax9gs\project\app\Http\Controllers\FrontEndController.php:101
$cart не является массивом или коллекцией. Поскольку вы используете first(), это либо будет один объект, либо он будет нулевым.
проблема заключалась в том, что переменная $cart вернула значение null, и я использовал ее в функции count() > 0. Я просто удаляю count() > 0, и проблема решена.






Судя по вашему комментарию, вы используете count() для элемента, не являющегося массивом, это запрещено. Вы должны изменить свой чек:
От:
if (count($cart) > 0 ){
К:
if (is_array($cart) && count($cart) > 0 ){
Совет: сначала убедитесь, что $cart является массивом, прежде чем проверять его длину.
проблема заключалась в том, что переменная $cart вернула значение null я только что перешел с
if (count($cart) > 0 ){
$data = $request->all();
$cart->update($data);
}
к этому:
if ($cart){
$data = $request->all();
$cart->update($data);
}
и решить проблему Спасибо всем :)
Ничего полезного в вашем журнале laravel?