我想以某种方式抓住laravel错误,警告消息。我不想从config / app.php文件中禁用它们。我正在使用monolog来记录一些信息。 这是我的一段代码:
public function view($id){
try {
$tag = Tags::find(12313); // tags is a model
}catch(Exception $error){
echo 'error'; exit();
$this->log->logMessage(Logger::ERROR, $error->getMessage());
return redirect()->route('admin.tags')->with(['msg' => 'Smth went wrong']);
}
}
$this->log
是我使用monolog class
来记录信息的类。
事实是,现在,它并没有进入捕获部分。我没有收到error
消息。我从laravel那里收到了这条消息:
Trying to get property of non-object (View: ......
我故意将号码12313
放在那里,看它是否有效。由于某种原因不起作用,我没有重定向。这个想法,如果发生了什么事,我想将用户重定向到具有一般错误消息的特定页面。我怎样才能做到这一点?
答案 0 :(得分:0)
您可以在laravel中执行此操作。您可以在App \ Exceptions \ Handler类中处理错误
public function render($request, Exception $exception)
{
if($exception instanceof NotFoundHttpException)
{
return response()->view('errors.404', [], 404);
}
if ($exception instanceof MethodNotAllowedHttpException)
{
return response()->view('errors.405', [], 405);
}
if($exception instanceof MethodNotAllowedHttpException)
{
return response()->view('errors.404', [], 405);
}
return parent::render($request, $exception);
}
答案 1 :(得分:0)
find()
方法不会抛出异常。所以这样做:
public function view($id)
{
$tag = Tags::find(12313); // tags is a model
if (is_null($tag)) {
$this->log->logMessage(Logger::ERROR, $error->getMessage());
return redirect()->route('admin.tags')->with(['msg' => 'Smth went wrong']);
}
}
或者使用findOrFail()
如果找不到指定的记录则会抛出异常。
有时,如果找不到模型,您可能希望抛出异常。这在路线或控制器中特别有用。 findOrFail和firstOrFail方法将检索查询的第一个结果;但是,如果未找到任何结果,则会抛出
Illuminate\Database\Eloquent\ModelNotFoundException