【发布时间】:2018-10-03 16:48:22
【问题描述】:
我是 Laravel 的新手。当我尝试从表中填充 DropDown 时出现“未找到变量”的问题:表名称为 Cats(类别),模型名称为“Cat”,如下所示:
class Cat extends Model
{
public function project() {
return $this->hasMany('App\Project');
}
}
一个项目可以有 1 个类别。一个类别名称可以在多个项目中。我现在想在我想插入一个新项目的表单中填充一个下拉列表:要实现这一点,
我已经制定了路线:
Route::get('myform', 'HomeController@myform');
我在我的 HomeController 中创建了一个函数,我将变量“$cats”传递给我的视图(我确实这么认为):
public function myform()
{
$cats = Cat::pluck('name', 'id');
return view('project-insert', get_defined_vars());
}
或其他版本:
public function myform()
{
$cats = Cat::pluck('name', 'id');
return view('project-insert',compact('cats'));
}
在我看来,我正在尝试使用以下方式打印数据:
{!! Form::open() !!}
{!! Form::select('id', $cats, null, ['class' => 'form-control']) !!}
{!! Form::close() !!}
但我收到“未找到变量猫”错误。如何告诉视图获取变量“$cats”?
我创建了一个新视图 (myform.blade.php) 并在那里尝试了同样的方法:
<html>
<body>
{{ dd($cats) }}
{!! Form::open() !!}
{!! Form::select('id', $cats, null, ['class' => 'form-control']) !!}
{!! Form::close() !!}
</body>
</html>
还有一条路线:
Route::get('myform', 'HomeController@myform');
在我的控制器中链接到新视图:
public function myform() {
$user = Auth::user();
$cats = Cat::pluck('name', 'id');
return view('myform', get_defined_vars());
}
现在:
dd($cats)
正在显示预期的结果...奇怪,它正在使用新刀片,而不是旧刀片!
感谢您的帮助和建议!
斯蒂芬
【问题讨论】:
-
虽然使用
compact('cats')更具表现力,我鼓励您在get_defined_vars()上使用它,但这两种方式都应该有效。你能试着找出你得到错误的确切位置吗?如果您删除{!! Form::select(...) !!}行,您还会收到错误吗? -
您好 Devk,感谢您的帮助。我制作了一个新刀片:带有该代码的 form.blade.php:
-
代码实在是乱七八糟在评论里看,也许你可以编辑你原来的问题并添加它。
-
亲爱的 Devk,很抱歉给您带来不便。我已经编辑了上面的代码。
-
我很确定问题出在其他地方。在此请求周期中,您还在哪里使用
$cats变量?另外,这个错误除了variable cats not found之外还有什么意思吗?storage/logs/laravel.log文件可能有更多描述性的解释(取决于您的日志记录设置)。