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

时间:2017-11-03 13:23:02

标签: php laravel nginx laravel-5

我偶然发现了一个相当奇怪的问题。除了一组唯一的路由参数外,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

}

1 个答案:

答案 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

字面上唯一改变的是换行符。我为此感到困惑。有谁知道为什么这解决了这个问题,因为如果是这样的话,你应该得到答案!