laravel5如何向 blade 模板传递多维数组?


在controller中使用view()方法向blade模板传递数组时出错。具体如下:


 $data['first'] = array(array('lily', 'lucy'));
return view('result', $data)

在blade模板的代码:


 @foreach($first as $value)
...
@endforeach

出错信息如下:


 ErrorException in helpers.php line 454:
htmlentities() expects parameter 1 to be string, array given (View: /home/wwwroot/laravel/resources/views/result.blade.php)

如果


 $data['last'] = array('lily', 'lucy');
return view('result', $last)

blade模板的$last就可以正常接收到数据。

难道laravel中并没传递多维数组的方法?还是我代码写的不对吗?

我看了文档,表述如下:

如果你想的话,还有一种方式就是直接在 view 辅助方法的第二个参数直接传递一个数组:

$view = view('greetings', $data);

如果你使用上面的方法来进行数据传参, $data 必须是 键/值对应的数组数据, 这样在视图里面, 你可以使用对应的键来获取值, 如: {{ $key }} 会取得 $data['$key'] 对应的数据.

这并没有说到多维数组的情况。

laravel laravel5 php laravel5.1

un4no 9 years, 8 months ago

是我弄错了。可以传,需要写with('last', $data),即专门指定last,自动识别的话,blade可以识别$data['first'],但后面的数组就不行了。

行走世间的黯 answered 9 years, 8 months ago

首先很高兴,又有Laravel的问题。

然后说说我的想法:

其实报错信息是这样的:它并没有说你的多维数组没有传递过去,这个多维数组实际上已经传给result.blade.php了,只是你在foreach循环的时候可能出错了:

你可能是写成类似这样:


 ```
@foreach($first as $value)
 {{ $value }}
@endforeach
```

其实应该是这样的:


 ```
@foreach($first as $value)
 {{ $value[0] }}
@endforeach
```

因为这里的$value其实就是一个数组,而blade引擎解析{{}}的时候是不能直接输出数组的,blade希望{{}}这个里面是字符串。

所以问题不是你没有传过去,而是传过去了你没有正确输出,你可以试试这样调试一下:


 ```
@foreach($first as $value)
 {{ dump($value) }}
@endforeach
```

Happy Hacking

会说话D三味线 answered 9 years, 8 months ago

Your Answer