Поместите удаление и исправление на одну и ту же страницу в laravel

<form action="/projects/{{$project->id}}" method="POST">
{{  method_field('DELETE') }}
{{  method_field('PATCH')  }}

{{ csrf_field() }}
<input type="text" name="heroname" value="{{$project->heroname}}"><br>

<textarea name="description" cols="30" rows="10" type="text">{{$project->description}}</textarea><br>

<button type="submit">Edit Info</button>

<button type="submit">Delete data</button>

</form>

В чем проблема, если я поставлю «ИСПРАВИТЬ» позже, обе мои кнопки будут обновлять материал, а если я поставлю «УДАЛИТЬ» позже, обе кнопки удалят его. Итак, как можно решить эту проблему, чтобы обе кнопки работали там, а не другие.


person Sarthak Jha    schedule 15.12.2018    source источник
comment
Проблема в том, что у вас обе кнопки в одной форме. Самый простой способ - поместить каждую функциональность в отдельную форму.   -  person julianstark999    schedule 15.12.2018


Ответы (2)


у вас не может быть 2 метода для 1 формы.

но вы можете изменить его, когда пользователь нажал кнопку.

чтобы сделать это сначала, вы должны обработать событие onclick для своих кнопок с помощью следующего кода:

<button onclick="changeMethod('PATCH')" type="submit">Edit Info</button>

<button onclick="changeMethod('DELETE')" type="submit">Delete data</button>

и добавьте идентификатор для вашей формы

<form action="/projects/{{$project->id}}" method="POST">

наконец определить функцию javasciprt

<script>
    function changeMethod(methodName){
        $('#myform').find('input[name=_method]').first().val(methodName);
    }
</script>

эта функция будет вызываться, когда пользователь нажимает на каждую кнопку и меняет значение метода на правильное.

Таким образом, ваш полный код будет таким:

<form id="myform" action="/projects/{{$project->id}}" method="POST">
    {{  method_field('DELETE') }}
    {{ csrf_field() }}
    <input type="text" name="heroname" value="3"><br>

    <textarea name="description" cols="30" rows="10" type="text">4</textarea><br>

    <button onclick="changeMethod('PATCH')" type="submit">Edit Info</button>

    <button onclick="changeMethod('DELETE')" type="submit">Delete data</button>

</form>
<script>
    function changeMethod(methodName){
        $('#myform').find('input[name=_method]').first().val(methodName);
    }
</script>
person Saman Ahmadi    schedule 15.12.2018

У вас есть два (на самом деле три, как заметил Саман) варианта:
1-й: использовать две формы
Это может быть самый простой вариант (пока дело не доходит до макета).

<form action="/projects/{{$project->id}}" method="POST">
{{  method_field('DELETE') }}
{{ csrf_field() }}

<button type="submit">Delete data</button>

</form>

<form action="/projects/{{$project->id}}" method="POST">
{{  method_field('PATCH')  }}

{{ csrf_field() }}
<input type="text" name="heroname" value="{{$project->heroname}}"><br>

<textarea name="description" cols="30" rows="10" type="text">{{$project->description}}</textarea><br>

<button type="submit">Edit Info</button>
</form>

Используя немного CSS, вы можете выровнять две кнопки и сделать их похожими на одну форму.

2-й: Javascript (/JQuery)
Я буду использовать JQuery, чтобы продемонстрировать это.

HTML

<form id="form" action="/projects/{{$project->id}}" method="POST">

{{ csrf_field() }}
<input type="text" name="heroname" value="{{$project->heroname}}"><br>

<textarea name="description" cols="30" rows="10" type="text">{{$project->description}}</textarea><br>

<button type="submit">Edit Info</button>

<button type="submit">Delete data</button>

</form>

JS

$("#edit-button").click(function(event) {
//I experienced that sometimes the form submits although it's not a submit button
event.preventDefault(); 

$("#form input[type=hidden]").val("PATCH");
$(form).submit();
});

$("#delete-button").click(function(event) {
//I experienced that sometimes the form submits although it's not a submit button
event.preventDefault(); 

$("#form input[type=hidden]").val("DELETE");
$(form).submit();
});
person TimSch    schedule 15.12.2018