Laravel返回视图不发送数据,但echo视图有效



我偶然发现了一个相当奇怪的问题。return view('myview', $data);适用于除一组唯一的路由参数之外的所有参数。例如,如果我调用:

http://example.com/category/692/626/0

视图按预期返回。但是,如果我打电话:

http://example.com/category/692/528/0

我收到以下信息:

This page isn’t working
example.com didn’t send any data.
ERR_EMPTY_RESPONSE

如果我在控制器的末尾回显视图:

echo view('myview', $data);

一切如预期。

在检查nginxerror.log后,我发现发生这种情况时正在写入以下行:

2017/11/03 13:12:03 [alert] 498#0: *94 header already sent while sending response to client, client: 0.0.0.0, server: example.com, request: "GET /category/692/528/0 HTTP/1.1", subrequest: "/inc/footer.htm", host: "example.com"

我很困惑,为什么只有当我试图从控制器返回这一组特定参数的视图时,才会发生这种情况。如果这个错误一直都在发生,那就更有意义了。

我开始通过删除返回的记录来调试这个问题,并删除一个特定的记录来修复这个问题,但这个记录和其他返回的记录之间似乎没有任何区别(检查了隐藏字符,没有什么异常)。

过去有人遇到过这个问题吗?有人知道是什么原因造成的吗?

编辑

根据要求在下面编码。这是相当基本的,只需抓取数据,渲染视图并返回即可

/* ROUTE in web.php
------------------------------------------------------*/
Route::get('/category/{category}/{subcategory}/{subsubcategory}', 'SearchController@category_search');

/* CONTROLLER FUNCTION
------------------------------------------------------*/
public function category_search($category_id, $subcategory_id, $subsubcategory_id, Request $request){
// search_users() obtains resultset of users based on parameters passed.
$users = $this->search_users($category_id, '', '', '');
$data = array(
'users'     => $users
);
// Data is obtained successfully and everything working as expected at this point
//  echo '<pre>';
//  echo var_export($data, true);
//  echo '</pre>';
//  die;
//echo view('search/categories', $data); <-- This works
return view('search/categories', $data); // <-- This does not
}

我已经设法纠正了这个问题,但我根本不相信这是一个可靠的解决方案。我甚至不知道它是如何解决这个问题的。如果其他人知道为什么这样做,请告诉我。

在blade文件中显示成员的原始循环如下:

@if(count($members) > 0)
@php $count = 0; @endphp
@foreach($members as $member)
@php $count++; @endphp
<div class="well {{($count % 2 == 0) ? 'results-well-even' : 'results-well-odd'}}">
<a href="/members/{{$member->id}}">{{$member->name}}</a>
<br/>
<span class="hometown">
{{$member->city}}, {{$member->state}}
</span>
<br/>
@if((property_exists($member, "distance")))
<span class="distance">
Distance: {{$member->distance}} miles
</span>
@endif
</div>
@endforeach
@else

@endif

修改后的循环如下:

@if(count($members) > 0)
@php $count = 0; @endphp
@foreach($members as $member)
@php $count++; @endphp
<!-- LINE BREAK ADDED HERE -->
<div class="well {{($count % 2 == 0) ? 'results-well-even' : 'results-well-odd'}}">
<a href="/members/{{$member->id}}">{{$member->name}}</a>
<br/>
<span class="hometown">
{{$member->city}}, {{$member->state}}
</span>
<br/>
@if((property_exists($member, "distance")))
<span class="distance">
Distance: {{$member->distance}} miles
</span>
@endif
</div>
@endforeach
@else

@endif

从字面上看,唯一改变的是换行。我对此感到困惑。有人知道为什么这样解决了这个问题吗?因为如果是这样,你的答案值得称赞!

最新更新