如何在 Laravel Blade 中创建动态生成的下拉列表

How create dynamic generated dropdown in Laravel Blade

我有一个 table statuses(第 idstatusename 列)并希望显示一个基于此 table 的 "select" 列表动态地。 我的模型:

namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Statuses extends Model
    {
       protected $table = "CaseStatus";
    }

控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Statuses;
class StatusesList extends Controller
{
    public function getstatuseslist() {
        $list = Statuses::all();
        return view('forms.statuses')->with('data', $list);
    }
}

statuses.blade.php:

<select name="Statuses">
@foreach ($data as $page)
<option value="{{ $page->ID }}">{{ $page->StatuseName }}</option>
@endforeach
</select>

路线:

Route::any('/list/statuses','StatusesList@getstatuseslist');

如果我打开 url http://myproject/list/statuses - 它工作正常,我看到了下拉列表。 但是,如果我将我的 statuses.blade.php 包含在另一个模板的表单中:

 @include('forms.statuses')

我收到错误

"Undefined variable data".

如何正确包含? 我的 Laravel 版本是 5.4。

我认为您的 $data 仅在从您定义的控制器方法传递时传递给您的 'forms.statuses' 视图。

如果您想将此数据用于包含 'forms.statuses' 的其他 "parent" 视图,您必须在 returns 和 'parent' 视图的控制器中再次传递它.

有一种方法可以让它在许多视图中保持不变。有关详细信息,请参阅 'view composer'。这是在 Laravel 文档中查看作曲家的 link:https://laravel.com/docs/5.4/views#view-composers

首先,如果您有 table statuses,您的模型名称应该是 status.

你的功能在另一个 blade 中不起作用的问题是因为你的另一个 blade 控制器没有连接到你的模型,所以它不知道从哪里获得你要求的信息。解决这个问题很简单,只需添加您的模型代码 this->

public function getstatuseslist() {
        $list = Statuses::all();
        return view('your_other_view')->with('data', $list);
    }

进入那个页面控制器。

别忘了在你的第二个控制器中调用你的模型。

use App\Statuses;

之后在你的第二个 blade 中也能正常工作。