我偶然发现了一个相当奇怪的问题。除了一组唯一的路由参数外,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);
一切都按预期工作。
在检查nginx error.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
}
答案 0 :(得分:0)
我设法解决了这个问题,但我完全不相信这是一个可靠的解决方案。我甚至不确定它是如何解决这个问题的。如果其他人知道为什么会这样,请告诉我。
在.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
字面上唯一改变的是换行符。我为此感到困惑。有谁知道为什么这解决了这个问题,因为如果是这样的话,你应该得到答案!