【问题标题】:Laravel 5.1 NotFoundHttpException in RouteCollection.php when trying to delete something from database尝试从数据库中删除某些内容时,RouteCollection.php 中的 Laravel 5.1 NotFoundHttpException
【发布时间】:2015-11-09 18:11:22
【问题描述】:

我正在构建一个应用程序,用户可以在其中喜欢/不喜欢彼此的项目。我已经建立了一个系统,允许用户喜欢这项工作,并且每个喜欢都以唯一的 ID、project_id 和 user_id 存储在我的数据库中。

现在我正在构建 Unlike 部分,但在点击 Unlike 按钮时出现错误。

错误:

抱歉,找不到您要查找的页面。 RouteCollection.php 第 161 行中的 NotFoundHttpException:

我的路线:

Route::post('projects/{id}', 'LikesController@store');
Route::get('projects/{id}','LikesController@destroy');

我的控制器

public function store(Request $request)
{
    $input = Request::all();
    $like = new Like;
    $like->user_id = Auth::user()->id;
    $like->project_id = $input['project_id'];
    $like->save();
    return redirect('projects/'.$input['project_id']);
}

public function destroy($id)
{
    $input = Request::all();
    Like::find($id)->delete();
    return redirect('projects/'.$input['project_id']);
}

我的表格

@if (Auth::check())
                @if ($isLikedUser)
                    {!! Form::open(array('url'=>'projects/'.$project->id.'/deletelike','method'=>'POST')) !!}
                    {!! Form::hidden('project_id', $project->id) !!}
                    {!! Form::Submit('Unlike', array('class'=>'send-btn')) !!}
                    {!! Form::close() !!}
                @else
                    {!! Form::open(array('url'=>'projects/'.$project->id,'method'=>'POST', 'id'=>'likeform')) !!}
                    {!! Form::hidden('project_id', $project->id) !!}
                    {!! Form::Submit('Like', array('class'=>'send-btn')) !!}
                    {!! Form::close() !!}
                @endif
    @else
            <p>Log in to like.</p>
    @endif

【问题讨论】:

  • 已编辑 OP。添加了正确的错误消息。
  • 在命令行上写php artisan route:list 并发布您注册的路线。你也可以写堆栈跟踪吗?
  • 我知道 projects/{id}/deletelike 路线不存在,我没有查看它或任何我只想用它来删除喜欢的东西。可能是 projects/{id}/hellothere 这无关紧要,因为我只是想用来删除一个赞。这是对还是错?
  • 你的方法都是post,改一下:Route::post('projects/{id}','LikesController@destroy');
  • 我这样做了,现在当我去一个项目并按“喜欢”时,项目 ID 被删除。例如:我去项目 6,这个项目有 0 个赞。我按赞,id 为 6 的赞被删除。

标签: php mysql laravel


【解决方案1】:

您的 Route 声明当方法 id GET 时删除已完成。但是在您的不同按钮中,您的表单方法是 POST。将其更改为 GET。而且您为删除提供的操作网址是 'projects/'.$project-&gt;id.'/deletelike' 但在您的路线中,您没有这样的路线结构。此外,如果您使用 GET 发布此内容,则不需要隐藏 project_id,因为它已经在 url 中传递。所以你的删除表单应该是这样的

{!! Form::open(array('url'=>'projects/'.$project->id,'method'=>'GET')) !!}
{!! Form::Submit('Unlike', array('class'=>'send-btn')) !!}
{!! Form::close() !!}

编辑 1 最好像这样更改您的路线,并为喜欢和不喜欢使用帖子:

Route::post('projects/like/{id}', 'LikesController@store');
Route::post('projects/unlike/{id}','LikesController@destroy');

在你的表格中

{!! Form::open(array('url'=>'projects/like'.$project->id,'method'=>'POST')) !!}

和不同的形式

{!! Form::open(array('url'=>'projects/unlike/'.$project->id,'method'=>'POST')) !!}

你的删除方法应该是

public function destroy($id)
{
    $input = Request::all();
    Like::whereProjectId($id)->whereUserId(Auth::user()->id)->delete();
    return redirect('projects/'.$input['project_id']);
}

【讨论】:

  • 我能用 GET 方法从我的数据库中删除一些东西吗?
  • 并且喜欢和不喜欢方法之间需要有区别我将喜欢/不喜欢都更改为发布,当我按下喜欢按钮时,它会转到我控制器中的不喜欢功能
  • 对喜欢和不喜欢都使用帖子,但按照我在评论中编辑的方式更改路线。
  • 好的,我改变了它,它可以工作了。不幸的是,错误的喜欢被删除。项目 id 为 im in 的内容将被删除。我相信这是由破坏函数中的 $id 引起的。例如,有一个 id 为 6 的点赞,而我在项目 6 中按不同的是,id 为 6 的点赞会被删除,而不是从正在观看该项目的登录用户那里删除
  • 您将 project_id 作为参数发送到销毁函数,而是发送特定喜欢的 id。
猜你喜欢
  • 2016-07-03
  • 2016-10-13
  • 1970-01-01
  • 2017-10-10
  • 2015-12-09
  • 2017-01-10
  • 2018-02-19
  • 2015-10-15
  • 2015-10-13
相关资源
最近更新 更多