阻止显示laravel消息,并将用户重定向到Laravel 5中的自定义页面问题

时间:2017-10-07 16:07:52

标签: php laravel

我想以某种方式抓住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放在那里,看它是否有效。由于某种原因不起作用,我没有重定向。这个想法,如果发生了什么事,我想将用户重定向到具有一般错误消息的特定页面。我怎样才能做到这一点?

2 个答案:

答案 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