MrGobus
@MrGobus
Иван

Как правильно обработать put запрос в SLIM?

Хром ругается вот такими словами
Failed to load http://127.0.0.1/api/v1.0/item/1: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.


в случае с GET запросом помогла установка заголовка

return $response
  ->withHeader('Access-Control-Allow-Origin', '*')
  ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
  ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS')
  ->withJSON(...


Но вот PUT запрос не работает =(

Пробовал устанавливать заголовок не помогает

Если верить хрому вместо нужного запрос возвращает
Allowed methods: GET, PUT, POST, DELETE, PATCH

Ну и вопрос: Как правильно обрабатывать PUT запросы на slim

Код апи
<?php
	use \Psr\Http\Message\ServerRequestInterface as Request;
	use \Psr\Http\Message\ResponseInterface as Response;

	require 'vendor/autoload.php';

	$app = new \Slim\App;

	$app->get("/items/{first}/{amount}", function($request, $response, $args) {
		return $response
			->withHeader('Access-Control-Allow-Origin', '*')
            ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
            ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS')
			->withJSON(
				[
					"itemsCount" => 1,
					"items" => [
						[
							"id" => 1,
							"name" => "Shapka",
							"description" => "Description"
						],
						[
							"id" => 2,
							"name" => "Zontik",
							"description" => "Opisanie zontika"
						]
					]
				],
				200,
				JSON_UNESCAPED_UNICODE
			);
	});

	$app->put("/item/{id}", function($request, $response, $args) {
		return $response
			->withHeader('Access-Control-Allow-Origin', '*')
            ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
            ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS')
			->write("done");
	});

	// Catch-all route to serve a 404 Not Found page if none of the routes match
	// NOTE: make sure this route is defined last
	$app->map(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'], '/{routes:.+}', function($req, $res) {
	    $handler = $this->notFoundHandler; // handle using the default Slim page not found handler
	    return $handler($req, $res);
	});	

	$app->run();
?>

Код запроса
updateItem(item) {
		console.log("update item id: ", item)

		let xhr = new XMLHttpRequest()
		xhr.open("PUT", `http://127.0.0.1/api/v1.0/item/${item.id}`)
		xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8")
		xhr.send("{\"name\":\"azaza\"}")

		this.updateItemsFromRestApi()
	}
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
VladimirAndreev
@VladimirAndreev
php web dev
А морда на 127.0.01 находится?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы