【问题标题】:How to delete a certain object from your list in Laravel?如何从 Laravel 的列表中删除某个对象?
【发布时间】:2015-07-27 09:13:34
【问题描述】:

我有一个 subscribers 表:


当我点击 delete 时,btn 会带来一个确认模式:

我已经很接近了,但是当我点击删除时,即使我没有按最后一个 delete btn,它也会继续删除列表中的最后一个。


我知道我必须在某个地方使用这个{!! Form::hidden('$id', $subscribe->id)!!},我只是不知道应该把它放在哪里。


表格

<?php $x = 0; ?>

<div class="container">
    <div class="row">

        <a href="subscribe/create" class="btn btn-sm btn-success "> <span class="fa fa-plus"></span> Create </a><br><br>

        <table class="table">
            {{--Table Header--}}
            <thead class="thin-border-bottom">
                <th width="50" >#</th>
                <th width="200" >Email</th>
                <th width="100" >Subscribe On </th>
                <th width="100" >Delete </th>
            </thead>

            {{--Table Body--}}
            <tbody>


                <tr>
                    @foreach( $subscribes as $subscribe)

                    <?php $x = $x+1; ?>

                    <td>{{ $x }}</td>
                    <td>{{ $subscribe->email or '' }}</td>
                    <td>{{ $subscribe->created_at or '' }}</td>

    

                    <td><a data-toggle="modal" data-target="#delete_subscriber" type="button" class="btn btn-danger btn-xs">Delete</a></td>

                </tr>

                @endforeach

            </tbody>
        </table>

    </div>
</div>

模态

<div class="modal fade" id="delete_subscriber" tabindex="-1" role="dialog" aria-labelledby="edit" aria-hidden="true">
    <div class=" col-lg-5"> </div>
    <div class=" center col-lg-2">
        {!! Form::model($subscribe, array( 'route' => array('subscribe.destroy', $subscribe->id),'method' => 'DELETE')) !!}

        <hr style="height:300pt; visibility:hidden;" />

        {!! Form::submit ('Delete This Subscriber', array('class'=> 'btn btn-danger btn-lg btn-block', 'data-rel'=>"tooltip" , 'title'=>"Are you sure ?", 'data-placement'=>"top"))!!}<br><br>

        <button data-rel="tooltip"  title="Go Back" data-placement="bottom"  type="button" class="btn btn-primary btn-lg btn-block" class="close" data-dismiss="modal" > Cancel </button> <br>

        {!! Form::hidden('$id', $subscribe->id)!!}

        {!! Form::close()!!}

    </div>
</div>

谁能告诉我,我怎样才能删除正确的?

如何阻止我的应用程序删除列表中的最后一个对象?


控制器

public function destroy($id){

    $subscribe = Subscribe::find($id);

    $subscribe->delete();

    return Redirect::to('subscribe')
    ->with('success','The web directory was deleted succesfully!');

}

【问题讨论】:

  • 我们可以看看你的控制器吗?
  • 如果你卡住了,请回复我的代码 100% 工作
  • @Adnan :您的答案不适用于 Modal 这正是我想要做的。

标签: php laravel laravel-4 laravel-5


【解决方案1】:

我遇到了同样的问题,因为我很着急,我不得不通过在我的视图中为 foreach 循环中的每条记录创建一个新模式来绕过这个问题。我不认为这是一个复杂的解决方案,但就我而言,由于分页,我预计会有少量记录,但效果很好。我想您可以使用 Jquery 来操纵每次单击时的模态操作,但我无法使其工作。希望对你有帮助

【讨论】:

  • 您应该为每个模式动态创建 id,例如 id="delete_subscriber{!!subscribe->id!!}" 并在您的表数据目标中也作为 data-target="#delete_subscriber{!!订阅-> id!!}”。这样,您将为每条记录创建一个模式。
  • 这正是我所做的。
【解决方案2】:

您需要在每次按下删除按钮时动态设置删除表单中的 id,以便它知道要删除哪个。

在打开模式的链接上,添加一个onclick 属性来处理这个问题。这应该适合你。

<td><a data-toggle="modal" data-target="#delete_subscriber" type="button" class="btn btn-danger btn-xs" onclick="$('#delete_subscriber').find('input[type=hidden]').val({{ $subscribe->id }})">Delete</a></td>

【讨论】:

  • 对不起,它不起作用。现在,它不会删除,而是我得到了TokenMismatchException。我还需要在某个地方使用这个{!! Form::hidden('$id', $subscribe-&gt;id)!!} 吗?如果没有,我可以把它拿出来吗?
  • 很惊讶你现在得到了这个异常,因为这一切应该做的就是更新隐藏的输入字段。您仍然需要它,以便将其传递给控制器​​,以便您知道要删除哪个。
【解决方案3】:

像这样改变,但检查可能我错过了路线路径,并添加你的确认弹出窗口

查看 将此代码放入您的 foreach 循环中,为每一行和每一行项目 id 生成删除按钮

<td>
{!! Form::open(array('url' => 'subscribe/' . $subscribe->id)) !!}
   {!! Form::hidden('_method', 'DELETE') !!}
   {!! Form::submit('DELETE', array('class' => 'btn btn-danger')) !!}
{!! Form::close() !!}
</td>

控制器删除操作

public function destroy($id)
    {
        $subscribe= subscribe::subscribe($id);
        $subscribe->delete();    
        return redirect('subscribe')->with(['flash_message' => 'successful delete!']);
    }

【讨论】:

  • 我现在正在测试你的代码。我完全替换了我的&lt;td&gt;。我得到了MethodNotAllowedHttpException in RouteCollection.php 我不知道为什么。我试图调试它。有什么想法吗?
  • 嗯,你可以得到那个错误,因为你发布到 GET 路由。
  • 如果你有路由资源“订阅”这个路径必须有效
  • 现在你需要将你的 html 代码更改为在同一行播放它,然后 Form:submit('DELETE',... 用你的 {!! Form::submit ('删除此订阅者', array('class'=> 'btn btn-danger btn-lg btn-block', 'data-rel'=>"tooltip" , 'title'=>"Are you sure ?", 'data -placement'=>"top"))!!} 添加确认弹出窗口结合该代码....
【解决方案4】:

您只需要在模式中引用 Controller@destroy 的表单,将其显示为内联样式以在 laravel 5.2 中使用 method_field('DELETE') 和 crsf_field() 添加您的引导类或 css 中的按钮提交:

          <form action="{{ action('UsersController@destroy', $user->id)}}" method="POST" style="display:inline;">
        <button class="btn btn-danger btn-xs" onclick="return confirm('¿Seguro que deseas eliminar?')">
          <span class="glyphicon glyphicon-remove-sign" aria-hidden="true"></span>
        </button>
        {{ method_field('DELETE') }}
        {{ csrf_field() }}
      </form>

控制器没有变化:

    public function destroy($id)
{
    $user= user::find($id);
    $user-> delete();
    return redirect()->route('admin.users.index');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多