我正在向控制器添加一个存储方法,该方法将使用以下代码创建新模型并将其保存到数据库中:
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string',
'description' => 'required|string',
]);
$team = Book::create($validated);
$request->session()->flash('flash_message', "Book created successfully.");
return redirect("/site/books");
}
据说,如果 Book 创建由于任何原因失败,将会生成一个异常,这将阻止 flash() 发生,因此该行不需要包含在 if() 语句中来检查 Book 是否实际上已创建(也不是 try/catch 块或数据库事务)。 这准确吗? 是否存在创建失败而没有错误或异常的情况,从而导致不准确的成功消息? 如果是这样,我该如何预防?
可以使用try catch方法来处理异常
public function store(Request $request) {
$validated = $request -> validate([
'name' => 'required|string',
'description' => 'required|string',
]);
try {
$team = Book:: create($validated);
$request -> session() -> flash('flash_message', "Book created successfully.");
return redirect("/site/books");
} catch (\Exception $e) {
return back()->with('error', 'Failed to create book. Please try again. ' . $e->getMessage());
}