希望这对我来说是一种愚蠢的疏忽,但我很难找到关于这个或其他Laravel类似用法的例子的信息。我正在开发一个Laravel 4站点,其内容不是使用本地数据库填充,而是使用来自特定Tumblr博客的帖子,通过Tumblr API填充。
每个Tumblr帖子都有与之关联的特定类型(“文字”,“视频”,“照片”等),每种类型都有完全不同类型的内容需要吐出,所以我有一个每种帖子类型的刀片模板,继承自主post
刀片模板。 (现在一切都只是一个存根。)
要填写首页,在我的控制器中,我使用这些帖子视图($postViews
)填充数组。令人抓狂的是,如果我遍历$postViews
并回显出控制器中的每个单独的视图,它包含正确的内容 - 数组中的所有三个视图都显示在最终站点上在他们正确的模板内。
但是当我将$postViews
发送到我的welcome
视图,然后在THERE内部循环$postViews
时,它只呈现三个实例,只有数组的第一个视图。我不明白为什么。
这是相关代码。正如您在欢迎模板中看到的那样,我尝试使用本机PHP和Laravel模板语法在欢迎视图中循环遍历$postViews
。它们都表现出相同的行为:仅显示三个帖子中的第一个,三次。
// controllers/HomeController.php
class HomeController extends BaseController {
public function showIndex()
{
$client = new Tumblr\API\Client(CONSUMERKEY, CONSUMERSECRET);
$tumblrData = (array) ($client->getBlogPosts(BLOGNAME));
$postViews = array();
foreach ($tumblrData['posts'] as $post) {
$post = (array) $post;
$type = TumblrParse::getPostType($post);
$postViews[] = View::make('tumblr.'.$type, array('post' => $post));
}
foreach ($postViews as $p){
echo $p;
// This works! It displays each post view properly before
// before rendering the welcome view, but I need them to
// be inside the welcome view in a specific place.
}
return View::make('home.welcome')->with('postViews', $postViews);
}
// views/home/welcome.blade.php
@extends('layouts.master')
@section('title')
@parent :: Welcome
@stop
@section('content')
<h1>Hello World!</h1>
<?php
foreach($postViews as $p) {
echo $p; // Just outputs the first of the array three times
}
?>
@foreach($postViews as $p)
{{ $p }} // Just outputs the first of the array three times
@endforeach
@stop
// views/layouts/post.blade.php
<div class="post">
@yield('postcontent')
</div>
// views/tumblr/photo.blade.php
// Other post types have their own views: video.blade.php, text.blade.php, etc.
@extends('layouts.post')
@section('postcontent')
<h1>This is a photo post!</h1>
<?php var_dump($post); ?>
@stop
我非常感谢任何帮助!我是Laravel的新手,我相信这很明显。而且据我所知,我在PHP中做错了,而不是特别是在Laravel。
答案 0 :(得分:2)
在这个实例中,在使用视图渲染方法将每个视图附加到$ postViews数组之前,将它们渲染为字符串可能是有意义的。
$postViews[] = View::make('tumblr.'.$type, array('post' => $post))->render();
答案 1 :(得分:0)
嵌套视图怎么样?检查文档。