Magento 2 Rest API, запрос каталога PUT не работаетPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Magento 2 Rest API, запрос каталога PUT не работает

Сообщение Anonymous »

Я использую приложение Symfony для отправки запросов к Magento 2 Rest Api. Когда я отправляю запрос PUT на обновление каталога, он не меняет информацию о каталоге в Magento, но меняет имя и другие параметры, кроме ParentId на стороне Symfony.

Вот код с запросом:

Код: Выделить всё

public function updateCategory($id, $name, $parentId, $isActive = true)
{
$pageSuffix = "rest/V1/categories/" . $id;
$headers = ['content-type' => "application/json", 'Authorization' => "Bearer " . $this->adminToken];
$content = ["category" => ["id" => (int)$id, "name" => $name, "parentId" => (int)$parentId, "isActive" => (bool)$isActive]];
$response = $this->buzz->put($this->urlBase .  $pageSuffix, $headers, json_encode($content));
print_r(json_decode($response));
print_r($this->buzz->getLastRequest());
}
дерево категорий перед отправкой запроса:

Код: Выделить всё

[id] => 1
[parent_id] => 0
[name] => Root Catalog
[is_active] =>
[position] => 0
[level] => 0
[product_count] => 0
[children_data] => Array
(
[0] => stdClass Object
(
[id] => 2
[parent_id] => 1
[name] => root_test_category_1
[is_active] => 1
[position] => 1
[level] => 1
[product_count] => 0
[children_data] => Array
(
[0] => stdClass Object
(
[id] => 3
[parent_id] => 2
[name] => test_category_1
[is_active] => 1
[position] => 1
[level] => 2
[product_count] => 0
[children_data] => Array
(
[0] => stdClass Object
(
[id] => 8
[parent_id] => 3
[name] => test_category_1_1
[is_active] => 1
[position] => 1
[level] => 3
[product_count] => 0
[children_data] => Array
(
[0] => stdClass Object
(
[id] => 9
[parent_id] => 8
[name] => test_category_1_1_1
[is_active] => 1
[position] => 1
[level] => 4
[product_count] => 0
[children_data] => Array
(
)

)

[1] => stdClass Object
(
[id] => 10
[parent_id] => 8
[name] => test_category_1_1_2
[is_active] => 1
[position] => 2
[level] => 4
[product_count] => 0
[children_data] => Array
(
)

)

[2] => stdClass Object
(
[id] => 16
[parent_id] => 8
[name] => test_category_1_1_3
[is_active] =>  1
[position] => 3
[level] => 4
[product_count] => 0
[children_data] => Array
(
)

)

)

)

)

)

)

)

[1] => stdClass Object
(
[id] => 5
[parent_id] => 1
[name] => root_test_category_2
[is_active] => 1
[position] => 2
[level] => 1
[product_count] => 0
[children_data] => Array
(
[0] => stdClass Object
(
[id] => 6
[parent_id] => 5
[name] => test_category_2_1
[is_active] => 1
[position] => 1
[level] => 2
[product_count] => 0
[children_data] => Array
(
)

)

)

)

)
Затем я отправляю запрос на изменение test_category_1_1_3, идентификатор 16. Команда ниже отправляет параметры, как в функции updateCategory(), указанной выше. Поэтому он должен получить каталог с идентификатором 16 и изменить его имя и родительский идентификатор.

Код: Выделить всё

app/console magento:test 16 test_category_1_1_3_test 6 1 -vvv
После запуска команды и отправки запроса я проверяю этот каталог, получая его из Magento Rest API. В результате он меняет имя, но все остальное остается прежним.

Код: Выделить всё

[id] => 16
[parent_id] => 8
[name] => test_category_1_1_3_test
[is_active] => 1
[position] => 3
[level] => 4
[product_count] => 0
[children_data] => Array
(
)
Ответ на запрос:

Код: Выделить всё

Buzz\Message\Response Object
(
[protocolVersion:Buzz\Message\Response:private] =>
[statusCode:Buzz\Message\Response:private] =>
[reasonPhrase:Buzz\Message\Response:private] =>
[headers:Buzz\Message\AbstractMessage:private] => Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Wed, 17 May 2017 12:56:23 GMT
[2] => Server: Apache/2.4.18 (Ubuntu)
[3] => Set-Cookie: PHPSESSID=56hrlb8nejsnrduk05npemd3n3; expires=Wed, 17-May-2017 13:56:23 GMT; Max-Age=3600; path=/; domain=magento-project.nikolay.localdev; HttpOnly
[4] => Expires: Thu, 19 Nov 1981 08:52:00 GMT
[5] => Cache-Control: no-store, no-cache, must-revalidate
[6] => Pragma: no-cache
[7] => X-Frame-Options: SAMEORIGIN
[8] => Content-Length: 739
[9] => Content-Type: application/json; charset=utf-8
)

[content:Buzz\Message\AbstractMessage:private] => {"id":16,"parent_id":8,"name":"test_category_1_1_3_test","is_active":true,"position":3,"level":4,"children":"","created_at":"2017-05-17 10:51:17","updated_at":"2017-05-17 10:51:17","path":"1\/2\/3\/8\/16","available_sort_by":[],"include_in_menu":true,"custom_attributes":[{"attribute_code":"display_mode","value":"PRODUCTS"},{"attribute_code":"is_anchor","value":"1"},{"attribute_code":"path","value":"1\/2\/3\/8\/16"},{"attribute_code":"children_count","value":"0"},{"attribute_code":"custom_use_parent_settings","value":"0"},{"attribute_code":"custom_apply_to_products","value":"0"},{"attribute_code":"url_key","value":"test-category-1-1-3"},{"attribute_code":"url_path","value":"test-category\/test-category-1-1\/test-category-1-1-3"}]}
)
Buzz\Message\Request Object
(
[method:Buzz\Message\Request:private] => PUT
[resource:Buzz\Message\Request:private] => /rest/V1/categories/16
[host:Buzz\Message\Request:private] => http://magento-project.nikolay.localdev
[protocolVersion:Buzz\Message\Request:private] => 1.1
[headers:Buzz\Message\AbstractMessage:private] => Array
(
[0] => content-type: application/json
[1] => Authorization: Bearer mcq2i97t0t3b15hdmwwhoolp6ma0lyuy
)

[content:Buzz\Message\AbstractMessage:private] => {"category":{"id":16,"name":"test_category_1_1_3_test","parentId":6,"isActive":true}}
)
Более того, в самом Magento вообще ничего не меняется.

Изображение


Я пытался отладить функцию save() в (vendor/magento/module-catalog/Model/CategoryRepository.php), но она не показала мне ничего, что могло бы помочь. Я пытался очистить кеш как на Magento, так и на Symfony, но это тоже не помогает.

Подробнее здесь: https://stackoverflow.com/questions/440 ... oesnt-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»