Метод DELETE не работает внутри переменной PHP - PullRequest
1 голос
/ 26 апреля 2020

Я использую laravel, и я пытался сделать живой поиск Ajax, мне удалось заставить его работать, но есть одна проблема с @csrf и @method ('DELETE'), не работающими внутри моего кода

foreach ($data as $row) {
                $output .= '<div class="col s4 m4">
                <div class="card blue-grey darken-1">
                    <div class="card-content white-text">
                        <span class="card-title center">'. $row->first_name.' '.$row->last_name.'</span>
                        <p><u>id</u>: '. $row->id.'</p>
                        <p><u>email</u>: '. $row->email.'</p>
                        <p><u>Phone</u>: '. $row->phone.'</p><br>
                    </div>
                    <div class="card-action">
                        <a href="/users/'. $row->id.'" class="waves-effect waves-light btn">Infos</a>
                        <a href="/users/'. $row->id.'/edit" class="waves-effect waves-light btn">Edit</a>
                        <a class="waves-effect waves-light btn modal-trigger center-align" href="#modal1">Delete<i class="material-icons right">delete</i></a>
                    </div>
                </div>
            </div>

            <div id="modal1" class="modal">
                <div class="modal-content">
                    <h4>Delete User</h4>
                    <p>Are you sure to delete this user?</p>
                </div>
                <div class="modal-footer">
                    <a href="#" class="modal-action modal-close waves-effect waves-red btn-flat ">Cancel<i class="material-icons right">close</i></a>
                    <form action="/users/'. $row->id.'" method="POST">
                        @csrf                  {{-- Doesn't work --}}
                        @method("DELETE")      {{-- Doesn't work --}}
                        <button class="modal-action modal-close waves-effect waves-green btn-flat" type="submit" name="action" value="delete">Confirm
                        <i class="material-icons right">check</i></a>
                    </form>
                </div>
            </div>
            <script type="text/javascript">
                $(document).ready(function(){
                    $("#modal1").modal();
                });
            </script>';
            }

это показывает мне эту ошибку:

Метод POST не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD, PUT, DELETE.

и @csrf / @method ('DELETE') появляются на моей странице, как если бы это был промежуток. Извините за мой английский sh Я пытаюсь быть максимально ясным.

Ответы [ 4 ]

2 голосов
/ 26 апреля 2020

Прежде всего, @csrf и @method являются директивой Laravel -blade, поэтому ее нужно определить внутри файла блейда. В противном случае это не будет работать.

Для использования вы можете передать данные из контроллера для просмотра и определения всего кода html в блейд-файле.

0 голосов
/ 26 апреля 2020

Вы не используете шаблонирование лезвий, поэтому вы не можете использовать @csrf или @methos там. 2 варианта для вас:

  1. Вы можете реорганизовать свой код для использования Blade, что было бы рекомендуемым вариантом для Laravel разработчика, и вы можете увидеть его полный текст в do c : https://laravel.com/docs/7.x/blade
  2. Вы можете вставить PHP эквивалент в ваш код

    <form action="/users/'. $row->id.'" method="POST">
        <input type="hidden" name="_token" value=".' csrf_token() '.">
        <input type="hidden" name="_method" value="DELETE">
        <button class="modal-action modal-close waves-effect waves-green btn-flat" type="submit" name="action" value="delete">Confirm
        <i class="material-icons right">check</i></a>
    </form>

0 голосов
/ 26 апреля 2020

Это не работает, потому что вы используете его в файле php. Он будет работать только в blade.php файлах.

Попробуйте использовать одно из следующих решений в качестве альтернативы.

Вы можете объявить скрытое поле

<input type="hidden" name="_method" value="delete" />

или Laravel 5.1 или выше вы можете использовать в блейд-файле

<form action="/users/'. $row->id.'" method="POST">
   {{method_field('DELETE')}}
   {{csrf_token}}
   <button class="modal-action modal-close waves-effect waves-green btn-flat" type="submit" name="action" value="delete">Confirm
     <i class="material-icons right">check</i>
  </button>
</form>
0 голосов
/ 26 апреля 2020

Лучше работать с именем маршрута. Значит вместо использования:

<form action="/users/'. $row->id.'" method="POST">
      @csrf                  {{-- Doesn't work --}}
      @method("DELETE")      {{-- Doesn't work --}}
      <button class="modal-action modal-close waves-effect waves-green btn-flat" type="submit" name="action" value="delete">Confirm
         <i class="material-icons right">check</i>
      </button>
</form>

использовать:

 <form action="{{ route('users.delete') }}" method="POST">
        @csrf                  
        @method("DELETE")
        <button class="modal-action modal-close waves-effect waves-green btn-flat" type="submit" name="action" value="delete">Confirm
        <i class="material-icons right">check</i>
 </button>
 </form>

возможно {{ route('users.delete') }} не существует для вас, поэтому вы можете просмотреть весь маршрут с помощью команды php artisan route:list и использовать правильное имя маршрута для метод удаления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...