传递模型数据以查看

时间:2019-10-06 08:56:09

标签: php laravel

尝试通过模型进行查看,但出现错误

模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Cat extends Model
{
    //
    protected $table ='Cat';
   protected $primaryKey = 'id';
}

控制器

<?php

namespace App\Http\Controllers;

use App\Cat;
use Illuminate\Http\Request;

class CatController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        $cats = Cat::all();

        return view('index', compact('cats'));
    }

然后我尝试在veiw中对其进行检查

 {{dd($cats)}}

错误消息

  

未定义变量:cats(查看:   C:\ xampp \ htdocs \ ecommece \ resources \ views \ app \ template.blade.php)

1 个答案:

答案 0 :(得分:0)

Laravel的工作方式是,当您将数据向下传递到视图时,该视图将仅可用于该视图以及直接包含在该视图中的其他刀片文件,因为它将在其范围内,而template.blade.php文件不是。

据我所知,您的选择将是只从索引视图中访问$cat变量,或者您可以转到将位于此目录中的BaseController:

  

app \ Http \ Controllers \ Controller.php

在您的构造函数中,您可能会遇到这样的事情:

public function __construct()
{
    $cats = Cat::all();

    View::share(['cats' => $cats]);
}

警告一句,第二个选项确实意味着$cats变量将在扩展基本Controller的任何控制器启动的每次页面加载中可用,因此,这并不是最有效的方法。确实意味着每次为Cat模型的所有记录加载页面时都会查询数据库,而实际上并非每次请求都需要该数据库。

尽管,您也可以以相同的方式使用CatController的构造函数,以至少限制为向该控制器发出的请求而加载的Cat模型。

以我的选择,似乎值得考虑对刀片模板进行重组,以使$cats视图中的index.blade.php变量的使用更加可行。

我希望这会有所帮助!