尝试和捕捉laravel它不适合我

时间:2017-10-02 18:57:11

标签: php laravel validation try-catch

我有一点问题,我正在尝试在我的laravel项目中添加验证(Try and Catch),问题是在某些控制器中工作正常,但在特定的情况下不起作用,验证是当尝试加载页面时出现问题,应用程序会将用户重定向到另一个带有消息的稳定页面;这是我的代码:

public function info($id)
{
    try {
        $likes = $this->interactionAndUser($id)[0];
        $dislikes = $this->interactionAndUser($id)[1];
        $downloads = $this->interactionAndUser($id)[4];
        $favorite = $this->interactionAndUser($id)[5];
        $myLike= $this->interactionAndUser($id)[2];
        $myDisLike = $this->interactionAndUser($id)[3];
        $book = $this->interactionAndUser($id)[6];
        $fileExistEpub = $this->interactionAndUser($id)[9];
        $fileExistPdf = $this->interactionAndUser($id)[10];
        $books = Book::find($id);
        $forum = Forum::where('book_id', $id)->first();
        $forumId = $forum->id;
        $forumTheme = $forum->theme_id;
        $forumHasTheme = Theme::where('id', $forumTheme)->first();   
        $comments = Comment::where(['forum_id' => $forumId, 'comment_id' => null])
        ->paginate(5);
       if(Cache::has($id)==false) { // Si el ID tiene un valor falso o 0 para el cache, agregue 1
            Cache::add($id, 'contador', 0.05); // Cada 0.05 segundos se contara una nueva visita por usuario, que recargue la pagina
            $book->views+=1;
            $book->save();
        }
        return view('books/info', compact('books', 'book', 'likes', 'dislikes', 'favorite', 'downloads', 'myLike', 'myDisLike', 'forum', 'forumHasTheme', 'comments', 'fileExistEpub', 'fileExistPdf'));
    } catch (\Exception $e) {
        return redirect('books')->with('errors', 'Ha ocurrido un errror, lo sentimos');
    } 
    } -> This code work perfectly

正如你所看到的,是对Laravel例外的一个简单验证,这很好用,如果出现问题,用户将重定向到另一个稳定的页面,这段代码在一个名为BookController的控制器中,问题使用FrontController和另一个函数,当我尝试通过验证时,永远不会将用户重定向到稳定的页面;这是我的代码

 public function info_novelty($id)
  {
    try {
      $novelty = Novelty::find($id);
      return view('news.show', compact('novelty'));
    } catch (\Exception $e) {
        return redirect('noticias')->with('errors', 'Ha ocurrido un errror, lo sentimos');
    }
  } -> This validation doesn't work

我不知道为什么会这样,如果有人可以帮助我,我会非常感激

这就是我得到它的错误

  

尝试获取非对象的属性(查看:/home/vagrant/Code/Biblio/resources/views/news/show.blade.php)

1 个答案:

答案 0 :(得分:1)

如果找不到给定ID的资源,您可以使用findOrFail()方法确保引发异常。

如果找不到资源,findOrFail()方法将抛出ModelNotFoundException,因此您的代码可以专门查找:

try {
      $novelty = Novelty::findOrFail($id);
      return view('news.show', compact('novelty'));
    } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
        // return more specific error message
    } catch (\Exception $e) {
        return redirect('noticias')->with('errors', 'Ha ocurrido un errror, lo sentimos');
    }