我偶然发现了一个相当奇怪的问题。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
从字面上看,唯一改变的是换行。我对此感到困惑。有人知道为什么这样解决了这个问题吗?因为如果是这样,你的答案值得称赞!