Как Laravel обрабатывает запросы PUT из браузеров? - программирование
Подтвердить что ты не робот

Как Laravel обрабатывает запросы PUT из браузеров?

Я знаю, что браузеры поддерживают только запросы POST и GET, а Laravel поддерживает запросы PUT, используя следующий код:

<?= Form::open('/path/', 'PUT'); ?>
    ... form stuff ...
<?= Form::close(); ?>

Это создает следующий HTML

<form method="POST" action="http://example.com/home/" accept-charset="UTF-8">
    <input type="hidden" name="_method" value="PUT" />
    ... form stuff ...
</form>

Как это работает с инфраструктурой? Захватывает ли запрос POST до решение о том, к какому маршруту отправляется запрос? Использует ли он ajax для отправки фактического PUT в фреймворк?

4b9b3361

Ответ 1

Вставляет скрытое поле, и это поле указывает, что это запрос PUT или DELETE

Смотрите здесь:

echo Form::open('user/profile', 'PUT');

приводит к:

<input type="hidden" name="_method" value="PUT">

Затем он ищет _method при маршрутизации в файле ядра request.php (ищите "spoofing" в коде) - и если он его обнаружит - будет использовать это значение для маршрутизации к правильному спокойному контроллеру.

Он все еще использует "POST" для достижения этого. Не используется ajax.

Ответ 2

Laravel использует Symfony Http Foundation, который проверяет эту переменную _method и изменяет запрос на PUT или DELETE на основе его содержимого. Да, это происходит до начала маршрутизации.

Ответ 3

Вы также можете использовать массив в своей форме так:

{{ Form::open( array('route' => array('equipment.update', $item->id ),
'role' => 'form',
'method' => 'put')) }}

Просто измените метод на то, что вы хотите.

Ответ 4

В то время как поздний ответ, я считаю важным добавить это для всех, кто находит это, и не может заставить их API работать.

При использовании маршрутов ресурсов Laravel, таких как:

Route::resource('myRoute','MyController');

Ожидается PUT для вызова метода update(). Чтобы это нормально работало (вне представления формы), вам необходимо убедиться, что вы передаете ContentType как x-www-form-urlencoded. Это значение по умолчанию для форм, но выполнение запросов с помощью cURL или с помощью такого инструмента, как Postman не будет работать, если вы не установили это.

Ответ 5

PUT обычно ссылается на запрос на обновление.

Когда вы открываете форму внутри шаблона ларавельного лезвия, используя

{{ Form::open('/path/', 'PUT') }}

Это создало бы скрытое поле внутри формы следующим образом:

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

Чтобы обрабатывать запрос PUT внутри вашего контроллера, вам нужно создать метод с префиксом put,

for example, putMethodName()

поэтому, если вы укажете,

{{ Form::open('controller/methodName/', 'PUT') }}

внутри Форма: открыта. Затем вам нужно будет создать метод контроллера следующим образом:

class Controller extends BaseController {
    public function putMethodName()
    {
        // put - usual update code logic goes here
    }
}

Ответ 6

в действительности нет запроса PUT! его запрос POST! когда вы говорите laravel; эй laravel это запрос PUT! это означает, что вы хотите обновить какой-то ресурс! {{Форма:: open ('пользователь/профиль', 'PUT')}} приведенная выше строка означает его запрос PUT (просто это означает обновление ресурса, как я уже упоминал, до того, как нет запроса PUT) эта строка кода создает скрытую запись в форме, которая указывает тип запроса, и когда маршрутизатор laravel получает запрос, он ищет обработчик PUT URI например sth: Route:: put ('the/url/you/упоминание/здесь/', 'someController @someAction');