停止处理视图?

时间:2014-07-14 13:16:58

标签: laravel laravel-4

在我的控制器中,我通过AJAX调用来调用它:

$data = Lib::index();
    $view = View::make('index')
        ->with('data', $data)
        ->render();
    return $view;

上述操作失败,因为我的数据库中不存在正确的表。

在Lib Index方法中,我抓住了这个失败:

catch (QueryException $e) {

    header('HTTP/1.0 404 Not found');
    exit;

}

我使用jquery调用ajax调用的.fail延迟方法来捕获上述错误。

以上所有工作(并按预期失败),直到我开始在视图中调用$ data var。

类似的事情:

@foreach($data as $asset)

我收到错误:

Trying to get property of non-object

但是,由于捕获了查询错误,甚至不应该处理视图。

我在teh视图中尝试过像isset和isempty这样的东西,但它仍处理视图。

为什么视图仍在处理中,如何阻止它?

1 个答案:

答案 0 :(得分:0)

我不确定是什么导致这种情况,但有几个简单的解决方案:

  1. 而不是尝试设置404标头并返回,请使用Laravel的HTTP Exceptions

  2. 如果您必须在Lib::index()方法中捕获该错误,则可以尝试重新抛出\Symfony\Component\HttpKernel\Exception\NotFoundHttpException。然后,Laravel的默认错误处理程序将捕获它并将其返回给客户端。

  3. 最后,第三种方法是在Lib::index()方法之外捕获异常,然后返回不同的异常。

  4. 例如:

    try {
        $data = Lib::index();
        $view = View::make('index')
            ->with('data', $data)
            ->render();
        return $view;
    } catch(QueryException $e) {
        header('HTTP/1.0 404 Not found');
        exit;
    }