Slim 4 PUT и УДАЛИТЬ форму представления - PullRequest
1 голос
/ 12 февраля 2020

Как мне сделать PUT и DELETE формы представления в Slim 4? У меня есть следующий маршрут:

$group->get('/sites/create', SitesController::class . ':create')->setName('sites_create');
$group->get('/sites/{id}/edit', SitesController::class . ':edit')->setName('sites_edit');
$group->post('/sites', SitesController::class . ':createSubmit')->setName('sites_create_submit');
$group->put('/sites', SitesController::class . ':editSubmit')->setName('sites_edit_submit');

Вот мой:

<form action="/sites" method="POST">
    <label for="name">Site name</label>
    <input type="text" class="form-control" id="name" name="name">                 
    <input type="hidden" name="_METHOD" value="PUT">
    <button type="submit">Submit</button>
</form>

Вот как я бы сделал это в Slim 3.

Но это не так Я не собираюсь обращаться к методу editSubmit, вместо этого он идет к методу createSubmit.

Как мне отправить данные с использованием этих методов?

1 Ответ

1 голос
/ 12 февраля 2020

Согласно документации Slim 4 , вы все равно можете переопределить метод формы, используя параметр _METHOD в теле запроса POST или заголовок X-Http-Method-Override.

Важный момент ( из документов ) заключается в том, что вам нужно добавить Slim\Middleware\MethodOverrideMiddleware в ваше приложение, чтобы иметь возможность переопределить метод формы.

Вот полностью рабочий пример:

<?php

require __DIR__ . '/../vendor/autoload.php';

use Slim\Factory\AppFactory;

$app = AppFactory::create();
$app->addRoutingMiddleware();
$app->add(new Slim\Middleware\MethodOverrideMiddleware);

$app->get('/', function($request, $response){

    $form =<<<form
    <form action="/put" method="post">
        <input type="hidden" name="_METHOD" value="PUT"/>
        <button type="submit">Send PUT request</button>
    </form>
    <form action="/delete" method="post">
        <input type="hidden" name="_METHOD" value="DELETE"/>
        <button type="submit">Send DELETE request</button>
    </form>
form;

    $response->getBody()->write($form);
    return $response;
});

$app->put('/put', function($request, $response){
  $response->getBody()->write('The request method is: ' . $request->getMethod());
  return $response;
});
$app->delete('/delete', function($request, $response){
    $response->getBody()->write('The request method is: ' . $request->getMethod());
    return $response;
});

$app->run();
...