【发布时间】:2015-04-03 22:34:07
【问题描述】:
我决定尝试 Laravel,并想为我的表单创建下拉菜单。我在 BaseController 中创建了一个方便的方法,用于从数据库中获取数据。下面是函数列表:
protected function getList( $model, array $fields, $empty = 'Select option below' )
{
$options = array();
$owner = strtolower( $model ) . 's';
$records = $model::lists($fields[1], $fields[0]);
if( !empty( $records ) ){
foreach( $records as $key => $value ){
$options[$owner][$value] = $key;
}
}
$options[$owner][''] = $empty;
return $options;
}
然后在控制器中你可以像这样使用它:
//Get groups
$groups = $this->getList( 'Group', array(
'name', 'id'
));
//Get Project Managers
$project_managers = $this->getList( 'ProjectManager', array(
'name', 'id'
));
选择表单控件的输出有一个 optgroup,它引用列表的所有者或模型的所有者。如何删除 optgroup 使其不属于下拉列表内容的一部分?
下面是表单的输出:
<div class="input select">
<label for="project_manager">Project Manager</label>
<select name="project_manager_id">
<optgroup label="projectmanagers">
<option value="1">Riyaadh</option>
<option value="2">Luyanda</option>
<option selected="selected" value="">Select option below</option>
</optgroup>
</select>
</div>
【问题讨论】:
-
您在选择下拉列表中获得 optgroups 的原因是您在 getLists 方法中添加它们,在线
$options[$owner][$value] = $key;当数据中有多维数组时,选择会为每个添加 optgroups传递到Form::select(),关联键是组的标签,删除这些并且不会有任何 optgroups。简而言之,只需返回您的$records变量,所有的 optgroup 都将消失。 -
嗨,马特!在我的可重用 BaseController 函数中仅返回 $records 变量只会用记录 ID 填充下拉列表。
-
好吧,解决此问题的另一种方法是将
$options[$owner][$value] = $key;更改为$options[$value] = $key;,正如您所说,您正在向数组中添加另一个级别,从而添加 optgroup。 -
谢谢马特。这解决了我的问题。我知道应该有办法做到这一点。这个想法是不要让我的控制器用两行代码来获取模型列表,因此想要创建一些可重用的东西。你拯救了我的一天.... :-)
-
作为答案添加@LuyandaSiko
标签: php html laravel laravel-4