【问题标题】:Laravel: Populating a Dropdown from DBLaravel:从数据库填充下拉列表
【发布时间】: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 文件可能有更多描述性的解释(取决于您的日志记录设置)。

标签: laravel eloquent


【解决方案1】:

试试

return view('project-insert', ['cats' => $cats]);

但是compactget_defined_vars 是一样的。 你可以尝试在{!! Form::open() !!}之前添加这个: {{ dd($cats }}

【讨论】:

  • 亲爱的 J. Doe。谢谢您的帮助。当我删除表单并尝试使用 {{ dd($cats) }} 打印出来时,变量 $cats 仍然不存在。当我创建一个新视图并从“myform 函数”链接到该视图时,一切正常。奇怪的行为...
【解决方案2】:

我的错误。出现问题是因为路径错误

<form method="POST" action="{{ route('project-insert') }}">

路线必须是:

Route::post('project-insert', 'ProjectController@insert')->name('project-insert');

而不是

Route::post('project-insert', 'ProjectController@insert');

很抱歉造成混淆:-(

亲切的问候,

斯蒂芬

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 2017-03-12
    • 2011-11-09
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多