передача переменных в Laravel


я начинаю создавать CRUD. В методе index контроллера я поместил это:

public function index(){
    $productos=Producto::get();
    return view('productos.index')->with('productos',$productos);
}

и в представлении index.blade.php:

foreach($productos as $producto)
    echo "<tr>";?>
    <td class="text-center">{{$producto->id}}</td>
    <td class="text-center">{{$producto->nombre}}</td>
    <td class="text-center">{{$producto->precio}}</td>
    <td>
        <a href="{{ route('producto.show',$producto->id) }}" class="btn btn-info">Ver</a> 
    </td><?php
    echo "</tr>";

при попытке запустить приложение в браузере он говорит мне, что он не находит $продукты:

"Undefined переменная: продукты (View:C:\xampp\htdocs\ad\dam2d\resources\views\productos\index.blade.php)"

Author: Shaz, 2018-02-08

2 answers

Тест :

public function index(){
  $productos=Producto::get();
  return view('productos.index' , compact("productos"));
}

Я считаю само собой разумеющимся, что маршрут 'Products.index' в Routes хорошо настроен.

 0
Author: Yasti, 2018-02-08 12:39:39

Я отвечаю на этот вопрос, чтобы объяснить реальную проблему и дать решение с лучшими практиками, которые дают руководство будущим посетителям о том, как использовать и использовать Laravel.


Учитывая, что OP указывает, что ваша проблема заключалась в том, чтобы не включать пространство имен Producto, в соответствии со стандартом PSR-2 (который используется Laravel), объявление для включения класса с помощью use предпочтительнее, поэтому код контроллера это будет выглядеть следующим образом:

<?php

namespace App\Http\Controllers;

use App\Producto;

class MyController extends Controller
{
    public function index()
    {
        $productos = Producto::get();

        return view('productos.index')->with('productos', $productos);          
    }

    // otros métodos
}

Что касается представления, вы должны помнить, что в Blade вам не нужно использовать теги <?php ... ?> по какой-либо причине, как и в echo, это плохая практика. Правильный синтаксис:

@foreach($productos as $producto)
    <tr>
      <td class="text-center">{{$producto->id}}</td>
      <td class="text-center">{{$producto->nombre}}</td>
      <td class="text-center">{{$producto->precio}}</td>
      <td>
        <a href="{{ route('producto.show', $producto->id) }}" class="btn btn-info">Ver</a> 
      </td>
    </tr>
@endforeach
 3
Author: Shaz, 2018-02-10 03:04:42