如何解决在laravel中出错为:ErrorException未定义的变量:products
我是Laravel的新手,这是我的第一个项目。我正在开发一个电子商务网站。到目前为止,我已经在StackOverflow和laracasts的帮助下完成了该项目。为什么我会收到此错误?
我有一个错误, ErrorException未定义变量:产品
这是我的控制器。
CartController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Product;
use App\Category;
class CartController extends Controller
{
public function index()
{
$products = Product::get();
return view ('cart')->with(compact('products'));
}
public function create()
{
//
}
public function store(Request $request)
{
//
}
public function show($id)
{
$products = Product::find($id);
return view('cart')->with(compact('product'));
}
public function edit($id)
{
//
}
public function update(Request $request,$id)
{
//
}
public function destroy($id)
{
//
}
}
这是我的刀片文件。
cart.blade.php
@extends('layouts.single')
@section('content')
@foreach($products as $p)
<tr class="">
<td class="text-center">
<a href="#" class="text-gray-32 font-size-26">×</a>
</td>
<td class="d-none d-md-table-cell">
<a href="#"><img class="img-fluid max-width-100 p-1 border border-color-1" alt="Image Description"></a>
</td>
<td data-title="Product">
<a href="#" class="text-gray-90">{{ $p ['prod_name'] }}</a>
</td>
<td data-title="Price">
<span class="">LKR {{ $p ['prod_price'] }}.00</span>
</td>
<td data-title="Quantity">
<span class="sr-only">Quantity</span>
<!-- Quantity -->
<div class="border rounded-pill py-1 width-122 w-xl-80 px-3 border-color-1">
<div class="js-quantity row align-items-center">
<div class="col">
<input class="js-result form-control h-auto border-0 rounded p-0 shadow-none" type="text" value="1">
</div>
<div class="col-auto pr-1">
<a class="js-minus btn btn-icon btn-xs btn-outline-secondary rounded-circle border-0" href="javascript:;">
<small class="fas fa-minus btn-icon__inner"></small>
</a>
<a class="js-plus btn btn-icon btn-xs btn-outline-secondary rounded-circle border-0" href="javascript:;">
<small class="fas fa-plus btn-icon__inner"></small>
</a>
</div>
</div>
</div>
<!-- End Quantity -->
</td>
<td data-title="Total">
<span class="">$1,100.00</span>
</td>
</tr>
@endforeach
@endsection
这是我的路线。
web.php
Route::get('/cart','CartController@index')->name('cart');
Route::get('/cart/{id}','CartController@show')->name('cart');
产品表
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateProductsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('products',function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('prod_name');
$table->string('prod_brand')->nullable();
$table->unsignedBigInteger('cat_id');
$table->string('prod_description')->nullable();
$table->string('prod_item_code')->nullable();
$table->string('prod_modal')->nullable();
$table->string('prod_size')->nullable();
$table->string('prod_weight')->nullable();
$table->string('prod_height')->nullable();
$table->string('prod_manufacturer')->nullable();
$table->float('prod_price')->nullable();
$table->float('prod_discount')->nullable();
$table->float('prod_quantity')->nullable();
$table->string('prod_image_path')->nullable();
$table->timestamps();
$table->foreign('cat_id')
->references('id')
->on('categories')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('products');
}
}
产品型号
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Storage;
class Product extends Model
{
}
解决方法
您的问题出在控制器的索引方法中。在第一行上,您尝试分配$products
,但是该变量不存在。
public function index()
{
$arr['products'] = $products;
return view('cart')->with($arr);
}
您需要获取所有产品才能执行此操作。像这样:
public function index(Request $request)
{
$arr['products'] = Product::all();
return view('cart')->with($arr);
}
该示例将为您提供数据库中的所有产品。这并不是一个很好的解决方案,因为您可以拥有很多产品,从而使响应变得庞大而昂贵。要解决此问题,您可以添加分页。这是实现该目标的简单示例:
您需要获取所有产品才能执行此操作。像这样:
public function index(Request $request)
{
$limit = $request->input('limit',10);
$page = $request->input('page',1);
$arr['products'] = Product::paginate($limit,[],'page',$page)->items();
return view('cart')->with($arr);
}
同样,这只是一个示例,它使您了解此概念,并且可能更多地用于API响应,而不是查看响应,就像您在此处所做的一样,但是尽管如此,您最终还是需要了解一些内容。在此处了解更多信息:https://laravel.com/docs/7.x/pagination
编辑:由于您试图在视图中显示多个产品,因此您还必须迭代这些产品,以便可以一个一个地渲染它们。为此,您需要阅读以下内容:https://laravel.com/docs/7.x/blade#loops
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。