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

时间:2017-06-03 05:49:36

标签: php laravel laravel-blade

我有一个表statuses(列idstatusename)并希望动态显示基于此表的“选择”列表。 我的模特:

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');

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

 @include('forms.statuses')

我收到错误

"Undefined variable data".

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

2 个答案:

答案 0 :(得分:2)

如果你有statuses表,你的模型名称status应该是public function getstatuseslist() { $list = Statuses::all(); return view('your_other_view')->with('data', $list); } ,所有模型的第一个模型都是为了获取原始数据而不是表格。

您的功能在另一个刀片中不起作用的问题是因为您的另一个刀片控制器未连接到您的模型,因此它不知道从哪里获取您要求的信息。要解决这个问题很简单,只需添加您的型号代码 - >

use App\Statuses;

进入该页面控制器。

不要忘记在第二个控制器中调用你的模型。

if ($('#TipoVinculo option:selected').val() == 'Estagiario') {
        // Apply Required Validation
        $('[name="CboId"]').rules('add', {
            required: true, messages: {
                required: "Cbo is required."
            }
        });
    }
    else {
        // Remove Required Validation
        $('input[name="SubBranchId"]').rules('remove', 'required');
    }

之后,你的第二个刀片也能正常工作。

答案 1 :(得分:0)

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

如果您想将此数据用于其他父母&#34;包含{{1}}的视图,您必须在控制器中再次传递该视图,该控制器将返回该父级&#39;视图。

有一种方法可以让它在许多视图中保持不变。请参阅&#39;查看作曲家&#39;详情。这是在Laravel doc上查看作曲家的链接:https://laravel.com/docs/5.4/views#view-composers