【问题标题】:laravel 5.5 - Undefined variable: products in @foreach looplaravel 5.5 - 未定义的变量:@foreach 循环中的产品
【发布时间】:2018-06-14 10:31:16
【问题描述】:

我在使用 Laravel 5.5 构建项目时遇到了一些问题。

我想将表单中的数据保存在数据库中,并将它们显示在数组中。我在数组部分的tbody 中编写了一个@foreach 循环:

<table class="table table-striped">
  <thead>
  <tr>
    <th>ID</th>
    <th>Nom</th>
    <th>Prix</th>
    <th>Categorie</th>
    <th colspan="2">Action</th>
  </tr>
  </thead>
  <tbody>
    @foreach($products as $product)
    <tr>
      <td>{{$product->id}}</td>
      <td>{{$product->name}}</td>
      <td>{{$product->price}}</td>
      <td>{{$product->category}}</td>
      <td><a href="{{action('ProductController@edit', $product->id)}}" 
         class="btn btn-warning">Edit</a></td>
      <td>
      <form action="{{action('ProductController@destroy', $product->id)}}" 
         method="post">
         {{csrf_field()}}
         <input name="_method" type="hidden" value="DELETE">
         <button class="btn btn-danger" type="submit">Delete</button>
      </form>
      </td>
    </tr>
    @endforeach
  </tbody>
</table>

表格

<form id ="AddFormProduct" method="post" action="{{url('products')}}">
    {{csrf_field()}}
    <div class="row">
        <div class="col-md-4"></div>
        <div class="form-group">
            <label for="name">Nom:</label>
            <input type="text" class="form-control" name="name">
        </div>
    </div>
    <div class="row">
        <div class="col-md-4"></div>
        <div class="form-group">
            <label for="price">Prix:</label>
            <input type="text" class="form-control" name="price">
        </div>
    </div>
    <div class="row">
        <div class="col-md-4"></div>
            <div class="form-group">
                <label for="category">Categorie:</label>
                <select name="selectCategory" id="selectCategory" class="form-control">
                    @foreach($categories as $category)
                        <option value="{{$category->id}}">{{$category->name}}</option>
                    @endforeach
                </select>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-4"></div>
            <div class="form-group">
                <button type="submit" class="btn btn-success" style="margin-left:38px">Enregistrer</button>
        </div>
    </div>
</form>

第一个问题是我无法显示视图(带有数组和表单),因为我有这个:

错误异常 (E_ERROR) 未定义变量:products(查看:C:\xampp\htdocs\Laratest\resources\views\template.blade.php)

我尝试了很多解决方案,最后一个是:

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Product;
use View;

class ProductController extends Controller
{

public function index()
{
    $products = Product::orderBy('id','name')->get();
    return view('template', compact('products','categories'));

    // $products = Product::all();
    // return view('template', ['products' => $products]);
}


public function create()
{
   //
}


public function store(Request $request)
{
      $product = $this->validate(request(), [
        'name' => 'required',
        'price' => 'required|numeric',
        'category' => 'required'
      ]);
      Product::create($product);
      return back()->with('success', 'Le produit a bien été ajouté !');
}

public function edit($id)
{
    $product = Product::find($id);
    return view('products.edit',compact('product','id'));
}

public function update(Request $request, $id)
{
    $product = Product::find($id);
    $this->validate(request(), [
      'name' => 'required',
      'price' => 'required|numeric',
      'category' => 'required'
    ]);
    $product->name = $request->get('name');
    $product->price = $request->get('price');
    $product->category = $request->get('category');
    $product->save();
    return redirect('products')->with('success','Le produit a bien été 
modifié !');
}

public function destroy($id)
{
    $product = Product::find($id);
    $product->delete();
    return redirect('products')->with('success','Le produit a bien été 
supprimé !');
}
}

型号

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Input;

class Product extends Model
{
    protected $fillable = [
        'name', 
        'price', 
        'category'
    ];
}

路线

Route::resource('products','ProductController');
Route::get('/monCommerce', 'ProductController@index')->name('products');

第二个问题是我不知道如何从select&gt;options 获取我的值,它只适用于输入字段。 = 已解决

请提出建议。

【问题讨论】:

  • 这个解决方案行不通? return view('template', ['products' =&gt; $products]);
  • try -- return view('template', compact(['products','categories']));
  • 第二个问题尝试改变
  • 谢谢你们的回答,但它也不起作用......

标签: php laravel-5 foreach


【解决方案1】:

对于您的第一个问题,将您的路线更改为

Route::get('/monCommerce', 'ProductController@index')->name('products');
Route::resource('products','ProductController');

如果不是这样,那么: 这可能是因为您有一个空表或没有任何行的表,这肯定会返回一个空对象。所以检查那个错误。您可以在控制器或刀片本身上执行此操作,我建议在您的控制器上执行此操作。

如果在刀片上检查它:

尝试执行以下操作:

@if($products == null || $products == "")
  No data found
@else
  Your foreach loop
@endif

如果在控制器上试用: 只需使用 try 和 catch 异常处理程序。

对于您的第二个问题,请尝试更改

<select name="selectCategory" id="selectCategory" class="form-control">

   <select name="category" id="selectCategory" class="form-control"> 

因为您有类别字段,并且您已在模型中指定类别为可填写。如果您想将您的选择名称保留为 selectCategory,那么您必须在控制器中更改请求。

以防万一您想在选择表单中保留 selectCategory 名称

在您的 ProductController@store 中

public function store(Request $request)
{
   $request->category=$request->selectCategory;
}

【讨论】:

  • 谢谢@Deepesh Thapa,它适用于我的第二个问题。我的数据存储在我的数据库中。我已经更改了我的选择的名称
  • 对于我的主要问题,我的表“产品”中已经有一些数据。我已经尝试过您的 @if 条件,但它返回相同的错误(未定义变量:产品)
  • 你确定你的控制器中已经返回了项目
  • 你能检查一下它究竟在哪里返回未定义的变量。在您的日志文件中,您应该会看到一条引发错误的行。只需转到 Storage>framework>views 上的文件找到 template.blade.php 的视图文件并找到该行。让我确切知道他的错误在哪里持续存在
  • 就在 tbody 标签之后,在 foreach 的开头(参见link
猜你喜欢
  • 2020-11-03
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多