如何在Laravel 4中访问数组的键/值?

时间:2014-11-18 14:01:08

标签: php laravel-4 blade

如何在Laravel 4中访问数组的键/值?

创建

echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');

显示

{{{ $shirt->size or ''}}}

RESULT

它一直显示 L ,但我希望显示为

有人可以告诉我怎么做吗?

2 个答案:

答案 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') }}

等待有人帮我解决这个问题。我做了上面的代码,似乎就像我想要的那样。