在Laravel 4中使用DB填充选择标记

时间:2015-03-10 19:57:38

标签: php mysql laravel-4

我正在尝试使用来自mysql DB的数据生成一个select标签,该表单不在常规视图中,但它位于部分视图文件中,因此它出现在整个站点中,因此我无法使用常规控制器。

我从BaseController从DB获取数据并通过函数传递数据,我在控制器中的代码如下所示:

protected function setupLayout() {
    if (!is_null($this->layout)) {
        $this->layout = View::make($this->layout);
    }
    View::composer('partials.footer', function ($view) {
        $languages = array('' => 'Choose Language Pair:') + Languages::lists('name', 'id');
        $view->with('languages', $languages);
    });
}

然后我在选择标准杆上的刀片看起来像这样:

{{ Form::select('sourceLang', $languages,  Input::old('sourceLang'), array('class' => 'field required')); }}

我是Laravel的新手,我在教程后想出了这段代码,但它似乎不起作用,它会抛出未定义的变量:语言错误,就像视图没有从数据库中获取数据一样。

我很感激你能给我的任何帮助!

1 个答案:

答案 0 :(得分:1)

您必须在调用View::make()之前定义视图编辑器:

View::composer('partials.footer', function ($view) {
    $languages = array('' => 'Choose Language Pair:') + Languages::lists('name', 'id');
    $view->with('languages', $languages);
});
if (!is_null($this->layout)) {
    $this->layout = View::make($this->layout);
}

实际上我根本不会在setupLayout()注册作曲家。相反,我建议您添加一个新文件app/composers.php来存储所有视图作曲家。然后你需要把它包含在某个地方。例如,在底部的app/start/global.php中:

require app_path().'/composers.php';