Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API корзины #37

Open
the-toxic opened this issue Dec 28, 2017 · 7 comments
Open

API корзины #37

the-toxic opened this issue Dec 28, 2017 · 7 comments

Comments

@the-toxic
Copy link

the-toxic commented Dec 28, 2017

Дмитрий, на уроке добавления гибридного стораджа вы сказали, что это уберет проблему с проверкой корзины в куках.
Но в момент проверки есть ли в куках корзина, чтобы в последствии перекинуть ее в БД, она все равно лезет в куки .
HybridStorage.php - проверка: if ($cookieItems = $cookieStorage->load()) {}

Как лучше поступить в данной ситуации?
Временно решил доп. проверкой
if (Yii::$app->request->cookieValidationKey && $cookieItems = $cookieStorage->load()) {}

{
    "name": "Invalid Configuration",
    "message": "yii\\web\\Request::cookieValidationKey must be configured with a secret key.",
    "code": 0,
    "type": "yii\\base\\InvalidConfigException",
    "file": "/var/www/yii.toxic.pro/vendor/yiisoft/yii2/web/Request.php",
    "line": 1537,
    "stack-trace": [
        "#0 /var/www/yii.toxic.pro/vendor/yiisoft/yii2/web/Request.php(1519): yii\\web\\Request->loadCookies()",
        "#1 /var/www/yii.toxic.pro/vendor/yiisoft/yii2/base/Component.php(139): yii\\web\\Request->getCookies()",
        "#2 /var/www/yii.toxic.pro/shop/cart/storage/CookieStorage.php(24): yii\\base\\Component->__get('cookies')",
        "#3 /var/www/yii.toxic.pro/shop/cart/storage/HybridStorage.php(43): shop\\cart\\storage\\CookieStorage->load()",
        "#4 /var/www/yii.toxic.pro/shop/cart/storage/HybridStorage.php(32): shop\\cart\\storage\\HybridStorage->getStorage()",
        "#5 /var/www/yii.toxic.pro/shop/cart/Cart.php(108): shop\\cart\\storage\\HybridStorage->save(Array)",
        "#6 /var/www/yii.toxic.pro/shop/cart/Cart.php(82): shop\\cart\\Cart->saveItems()",
        "#7 /var/www/yii.toxic.pro/shop/services/Shop/CartService.php(44): shop\\cart\\Cart->clear()",
        "#8 /var/www/yii.toxic.pro/api/controllers/shop/CartController.php(132): shop\\services\\Shop\\CartService->clear()",
        "#9 [internal function]: api\\controllers\\shop\\CartController->actionClear()",
        "#10 /var/www/yii.toxic.pro/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)",
        "#11 /var/www/yii.toxic.pro/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\InlineAction->runWithParams(Array)",
        "#12 /var/www/yii.toxic.pro/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('clear', Array)",
        "#13 /var/www/yii.toxic.pro/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('shop/cart/clear', Array)",
        "#14 /var/www/yii.toxic.pro/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))",
        "#15 /var/www/yii.toxic.pro/api/web/index.php(17): yii\\base\\Application->run()",
        "#16 {main}"
    ]
}

И еще вопрос.
Как в API добавлять товары с модификациями в корзину?
Пишет: Необходимо заполнить «Modification»

@the-toxic
Copy link
Author

the-toxic commented Dec 28, 2017

Нашел еще косяк
/api/config/main.php -> urlManager

'PUT shop/cart/<id:\d+>/quantity' => 'shop/cart/quantity',
 'DELETE shop/cart/<id:\d+>' => 'shop/cart/delete',

В виде id передается хеш а не число, поэтому запросы не работают
/shop/cart/bad8c4faf77954d48f3714e82860d622

Нужно писать <id:\w+>

@the-toxic
Copy link
Author

the-toxic commented Dec 28, 2017

И еще вопрос, как добавить количество по этому запросу?
'PUT shop/cart/<id:\w+>/quantity' => 'shop/cart/quantity'

Я так понял по коду ниже постом надо передавать quantity=99
$this->service->set($id, (int)Yii::$app->request->post('quantity'));

А как передавать постом если тип запроса PUT? :)

@voidlz
Copy link

voidlz commented Dec 28, 2017

По поводу куки я делал так:

'request' => [
    'enableCookieValidation' => false,
]

PUT и POST - почитай чем они отличаются :)

@the-toxic
Copy link
Author

@hijackfl
Про теорию подхода я знаю. Меня интересует конкретная реализация.
Как нужно составить запрос для изменения кол-ва товара в корзине?
Пишу PUT shop/cart/bad8c4faf77954d48f3714e82860d622/quantity
и кол-во сбрасывается на 0

@voidlz
Copy link

voidlz commented Dec 28, 2017

В body отправляешь quantity=1. От POST ничем не отличается.
Вот пример curl из swagger'a:

curl -X PUT "http://api.your-site.com/shop/cart/9bc317d08c9ed25086ee8a4a305c577e/quantity" -H "accept: application/json" -H "Authorization: Bearer 888b97f6f9f985f88ce1769cc647738a1e6a9c90" -H "Content-Type: application/x-www-form-urlencoded" -d "quantity=3"

Ну, конечно, еще urlManager и swagger нужно подправить(issue по этому я уже сделал)

@the-toxic
Copy link
Author

@hijackfl
Спасибо, я не в то окно в phpStorm-rest test вставлял тело запроса)
Разобрался и с модификациями и с количеством

@voidlz
Copy link

voidlz commented Dec 28, 2017

И к слову quantity не должно сбрасываться на 0. Это тоже надо подправить.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants