【问题标题】:Laravel 2 submit buttons in the same formLaravel 2 以相同的形式提交按钮
【发布时间】:2019-10-11 16:13:57
【问题描述】:

我正在使用 Laravel 构建一个 CRUD。每个类别都有很多附件,每个附件都属于一个类别。

在 category.edit 视图中,我想让用户可以(单独)从类别中删除附件。这个方法我试过了,没用:

附件的注册路由:

Route::group(['middleware' => ['auth']], function () {
    Route::delete('attachment/{id}', 'AttachmentController@delete')->name('attachment');    
});

处理删除构建 AttachmentController@delete 方法:

class AttachmentController extends Controller
{
    public function delete($id) {

        $toDelete = Attachment::findOrFail($id);
        $toDelete->delete();
        return redirect()->back();
    }
}

在 CategoryController(编辑方法)中,我获取链接到要在视图中呈现的每个类别的附件:

public function edit($category)
{
    $wildcard = $category;
    $category = Category::findOrFail($wildcard);
    $attachments = App\Category::findOrFail($wildcard)->attachments()->get()->toArray();
    return view('category.edit', [
        'category' => $category,
        'attachments' => $attachments
    ]);
}

在视图中,我渲染了附件和要删除的按钮。我完全意识到在另一个表单中包含一个表单的错误,但是我不知道提交此删除请求的另一种方法。

// update Category form    
@foreach ($attachments as $attachment)
        <div class="row">
            <div class="col-4">
                <img style="width: 100%;" src={{ $attachment['url'] }} alt="">
            </div>
            <div class="col-4">
                <div>
                    <p class="general_par general_url">{{ $attachment['url'] }}</p>
                </div>
            </div>
            <div class="col-4">
                <form action="{{ route('attachment', $attachment['id']) }}" method="POST">
                    @csrf
                    @method('DELETE')
                    <button type="submit" class="btn btn-danger">Delete Image</button>
                </form>
            </div>
        </div>
        <hr>                  
    @endforeach
// end of update Category form

我应该在 CategoryController 中构建一个 deleteAttachment 方法吗?如果是这样,我怎样才能提交删除请求?另外,如果将来任何其他模型都有附件,我是否应该在每个控制器内构建一个 deleteAttachment 方法?那很麻烦。提前致谢

【问题讨论】:

    标签: laravel


    【解决方案1】:

    如果你不喜欢用form,那就用tag:

    <a class="btn btn-danger" href="{{ route('attachment', $attachment['id']) }}">Delete Image</a>
    

    并重新定义到Route::get(...)的路由

    (如果需要,也可以使用 ajax 作为 POST 方法)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-03
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2015-10-02
      • 2014-05-21
      相关资源
      最近更新 更多