如何在Laravel 4中访问数组的键/值?
创建
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');
显示
{{{ $shirt->size or ''}}}
RESULT
它一直显示 L ,但我希望显示为大
有人可以告诉我怎么做吗?
答案 0 :(得分:1)
简短的回答是你不能,或者至少不是你期望的方式。当一个项目被选中并发回给您时,发回的所有内容都是<option>
元素的值,而不是它的内容。
请注意:
{{ Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S') }}
生成HTML有点像这样:
<select name="size">
<option value="L">Large</option>
<option selected value="S">Small</option>
</select>
但是“L”和“大”等之间的键值配对现在已经丢失了。它用于创建HTML标记,但仅此而已 - 它不会存储在任何地方,您无法直接通过Laravel访问它。
当您的表单提交并发布到要发布的任何位置时,您的浏览器仅发送值,在本例中为“L”。 Laravel不知道“L”意味着“大”。您需要将此信息存储在其他位置,例如:
$sizes = array(
'L' => 'Large',
'S' => 'Small'
);
然后你可以使用(提供$sizes
传递给你的View
):
{{ Form::select('size', $sizes, 'S') }}
并使用$sizes[$shirt->size]
检索该值。
如果您想要格外小心(因为有人可以编辑HTML以提交与“L”或“S”不同的值),您可以执行类似
的操作$size = (array_key_exists($shirt->size, $sizes) ? $sizes[$shirt->size] : '');
第二个想法,因为看起来你有一个Shirt
模型,就是将以下内容添加到该类中:
public $sizes = array('L' => 'Large', 'S' => 'Small');
public function getSizeAttribute($v) {
return (array_key_exists($v, $this->sizes) ? $this->sizes[$v] : '');
}
然后$shirt->size
将完全按照您的意愿行事并吐出“大”。
答案 1 :(得分:1)
{{ Form::select('size', array('Large' => 'Large', 'Small' => 'Small'), 'Small') }}
等待有人帮我解决这个问题。我做了上面的代码,似乎就像我想要的那样。