我开始在Laravel,并希望发现更多关于使用错误处理,特别是ModelNotFoundException对象.
<?php
class MenuController extends BaseController {
function f() {
try {
$menus = Menu::where('parent_id', '>', 100)->firstOrFail();
} catch (ModelNotFoundException $e) {
$message = 'Invalid parent_id.';
return Redirect::to('error')->with('message', $message);
}
return $menus;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
在我的模型中:
<?php
use Illuminate\Database\Eloquent\ModelNotFoundException;
class Menu extends Eloquent {
protected $table = 'categories';
}
?>
Run Code Online (Sandbox Code Playgroud)
当然,对于我的例子,"类别"中没有记录,parent_id > 100这是我的单元测试.所以我期待着做点什么ModelNotFoundException.
如果我在浏览器中运行http://example.co.uk/f,我会收到:
Illuminate \ Database \ Eloquent \ ModelNotFoundException
No query results for model [Menu].
Run Code Online (Sandbox Code Playgroud)
laravel错误页面 - 这是预期的,但如何使用预定义的消息重定向到我的路由'错误'?即
<?php
// …Run Code Online (Sandbox Code Playgroud) 任何人都知道在Laravel中处理错误的最佳方法是什么,有什么规则可以遵循?
目前我这样做:
public function store(Request $request)
{
$plate = Plate::create($request->all());
if ($plate) {
return $this->response($this->plateTransformer->transform($plate));
} else {
// Error handling ?
// Error 400 bad request
$this->setStatusCode(400);
return $this->responseWithError("Store failed.");
}
}
Run Code Online (Sandbox Code Playgroud)
setStatusCode和responseWithError来自我的控制器的父亲:
public function setStatusCode($statusCode)
{
$this->statusCode = $statusCode;
return $this;
}
public function responseWithError ($message )
{
return $this->response([
'error' => [
'message' => $message,
'status_code' => $this->getStatusCode()
]
]);
}
Run Code Online (Sandbox Code Playgroud)
但这是处理API错误的好方法,我看到一些不同的方法来处理网络上的错误,最好的是什么?
谢谢.
我正在尝试使用Laravel Framework构建一个REST api,我想要一种方法来强制API始终使用JSON进行响应,而不是通过以下方式执行此操作:
return Response::json($data);
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望每个响应都是JSON.有没有一个好方法呢?
更新:即使在未找到异常的异常情况下,响应也必须是JSON.