Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 4使用App::error和App::abort(404)_Php_Rest_Laravel_Laravel 4 - Fatal编程技术网

Php Laravel 4使用App::error和App::abort(404)

Php Laravel 4使用App::error和App::abort(404),php,rest,laravel,laravel-4,Php,Rest,Laravel,Laravel 4,我正在尝试使用Laravel编写一个RESTful API 我的路线是这样的: Route::resource('user', 'UserController'); 一种方法是: public function show($id) { return User::findOrFail($id); } 但是如果模型实例不存在,我会得到一个500错误,而我相信我需要一个404错误 因此,在start/global.php中,我有以下内容: App::error(function(Illum

我正在尝试使用Laravel编写一个RESTful API

我的路线是这样的:

Route::resource('user', 'UserController');
一种方法是:

public function show($id)
{
    return User::findOrFail($id);
}
但是如果模型实例不存在,我会得到一个500错误,而我相信我需要一个404错误

因此,在start/global.php中,我有以下内容:

App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $exception)
{
    App::abort(404);
});
这给了我一个200代码和异常处理程序中的消息错误

我做错什么了吗?我希望没有输出和404代码

谢谢


Michael

您需要使用
Response::make(“未找到”,404)
实际返回404头并显示
“未找到”
消息

您还可以使用一个视图来呈现您自己的自定义404显示,如下所示

返回响应::视图('missing',array(),404)

您还可以将缺少的处理程序添加到您的应用程序中,以便它可以处理您的代码

App::missing(function($exception) { 
    return Response::view('missing', array(), 404); 
}); 

您需要使用
Response::make(“未找到”,404)
实际返回404头并显示
“未找到”
消息

您还可以使用一个视图来呈现您自己的自定义404显示,如下所示

返回响应::视图('missing',array(),404)

您还可以将缺少的处理程序添加到您的应用程序中,以便它可以处理您的代码

App::missing(function($exception) { 
    return Response::view('missing', array(), 404); 
}); 

app/config/local/app.php
中的
debug
config值更改为
false
,以断言您实际获得的是404

你也可以:

  • 使用phpdoc运行单元测试:
    @expectedException Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    推荐
  • 推动你的开发,看看它是否真的有效

app/config/local/app.php
中的
debug
配置值更改为
false
,以断言您实际获得的是404

你也可以:

  • 使用phpdoc运行单元测试:
    @expectedException Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    推荐
  • 推动你的开发,看看它是否真的有效

为了完整起见,OP提到的行为(并且可以复制)之前在Laravel的Github上讨论过:。经决定,它符合设计,不会改变


因此,返回
Response::make(“未找到”,404)
响应::json(null,404)是目前唯一的解决方案,正如前面提到的。

为了完整起见,OP提到的行为(并且可以复制)在Laravel的Github上讨论过:。经决定,它符合设计,不会改变



因此,返回
Response::make(“未找到”,404)
响应::json(null,404)for JSON是目前唯一的解决方案,正如前面所提到的。

您确定仍然得到
200
?因为我刚刚在我的虚拟机上试过,它给了我一个
404
,尽管它确实显示了错误堆栈。您是如何检查错误代码的?我可以重现OP的行为,运行到一个HTTP 200代码发送的字符串中:
异常处理程序中的错误:in/home/vagrant/CiFR/vendor/laravel/framework/src/light/Foundation/application‌​n、 php:910
好的,我也设法复制了它。这是因为您在错误处理程序中抛出错误。我认为最好的解决办法是选择@MichaelBearjaws答案。你确定你仍然得到了
200
?因为我刚刚在我的虚拟机上试过,它给了我一个
404
,尽管它确实显示了错误堆栈。您是如何检查错误代码的?我可以重现OP的行为,运行到一个HTTP 200代码发送的字符串中:
异常处理程序中的错误:in/home/vagrant/CiFR/vendor/laravel/framework/src/light/Foundation/application‌​n、 php:910
好的,我也设法复制了它。这是因为您在错误处理程序中抛出错误。我认为最好的解决方案是选择@MichaelBearjaws答案。事实似乎并非如此,我只得到了一个带有错误堆栈跟踪的
404
。你测试过了吗?还是我遗漏了一些细节?@Raphael_uu你是对的,我被404上的单元测试所迷惑,而不是将响应代码断言为404。修正了我的答案。事实似乎并非如此,我只是得到了一个带有错误堆栈跟踪的
404
。你测试过了吗?还是我遗漏了一些细节?@Raphael_uu你是对的,我被404上的单元测试所迷惑,而不是将响应代码断言为404。修复了我的答案。只有当你有一个404处理程序App::missing(function($exception){return Response::view('missing',array(),404);})时,它才起作用;我没有404处理器,它只是起作用了。就像
App::abort(500)
给了500,但我没有处理程序。对不起,我错了。我在路由中测试
App::abort(404)
,而不是在错误处理程序中。你完全正确。声明
App::missing()
并不能解决这个问题。嘿,我考虑过
Response::view()
,但这会输出文本。我使用它作为API,所以我只希望404状态代码没有输出。与将
App::abort()
直接放入路由的方式相同。请尝试
Response::make(“”,404)
。编辑:因为这是一个API,@lowerends建议使用
Response::json(null,404)
似乎更好。只有当您有404处理程序App::missing(函数($exception){return Response::view('missing',array(),404);}时,它才起作用;我没有404处理器,它只是起作用了。就像
App::abort(500)
give500一样,我没有一个