如何以 laravel 刀片形式生成输入选择并自定义其选项值?

Posted

技术标签:

【中文标题】如何以 laravel 刀片形式生成输入选择并自定义其选项值?【英文标题】:How to generate input select in laravel blade form and customize its options value? 【发布时间】:2015-04-14 18:06:12 【问题描述】:

我正在尝试创建一个 laravel 表单,该表单具有从来自控制器的字符串数组生成的输入选择。

如何手动设置选项值?

在控制器中:

public function create()

    $eventTypes = EventType::all()->lists('title');
    return View::make('events.create')->with(compact('eventTypes'));

在视图中(刀片):

 Form::label('eventType', 'Type') 
 Form::select('eventType', $eventTypes, null, array('class'=> 'form-control')) 

并选择创建为:

<select class="form-control" id="eventType" name="eventType">
    <option value="0">Sport Competition</option>
    <option value="1">Movie</option>
    <option value="2">Concert</option>
</select>

我只想手动设置值。

【问题讨论】:

【参考方案1】:

选项中的值只是数组的键。 lists() 方法的第二个参数将让您选择一个字段作为键:

// use the 'id' field values for the array keys
$eventTypes = EventType::lists('title', 'id');

如果您想做一些比这更自定义的事情,您需要使用所需的键/值对手动构建您的数组。

编辑

正如@lukasgeiter 在 cmets 中提到的,无需先调用all()

EventType::all()-&gt;lists() 将首先生成一个包含所有 EventType 对象的集合。然后它将在 Collection 对象上调用 lists(),这意味着它将循环通过该 Collection 来构建一个包含您请求的字段的数组。

EventType::lists() 将在查询构建器对象上调用lists(),它只会选择两个请求的字段并将它们作为数组返回。它不会构建任何 EventType 对象(除非您选择由 Model accessor 构建的字段)。

【讨论】:

无需先致电all()lists() 也可以直接在查询生成器上工作。 @lukasgeiter 绝对正确。我的愚蠢疏忽。我已经更新了答案。 @Mehdi 我提供了您可能感兴趣的答案的更新(更新基于 lukasgeiter 的评论)。 感谢@all,对新的 laravel 开发人员非常有用的指南

以上是关于如何以 laravel 刀片形式生成输入选择并自定义其选项值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5.6 的一个刀片文件中使用不同的形式

Laravel 5.1 如何在刀片文件上使用 old('') 助手进行无线电输入

如何在 Laravel 刀片类别下获取子类别

如何在 Laravel 的选择选项中使用“枚举”值?

Laravel - 如何在视图中创建(匿名)动态刀片组件

如何从循环中获取值到刀片 - laravel