@darknet37

Как получить в контроллере значение из другого контроллера в котором из БД выводится ассоциативный массив?

Пишу интернет - магазин, и в Моделе:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Cart extends ActiveRecord
{
	public static function addToCart($product, $qty = 1)
	{
		if(isset($_SESSION['cart'][$product_id])) {
			$_SESSION['cart'][$product_id]['qty'] += $qty;
		}
		else {
			$_SESSION['cart'][$product_id] = [
				'qty' => $qty,
				'name' => $product->name,
				'price' => $product->price,
				'img' => $product->img
			];
		}
	}
}

В карточке товара он выводится вот так:
<?php foreach ($pr as $k => $v): ?>
    <span><?php echo "Размер: ".$k; ?></span><br>
    <span><?php echo "Цена: ".$v; ?></span><br>
    <input type="text" name="quentity" value="1"><br>
    <a href="<?php echo Url::to(['cart/add','id' => $product->product_id]);?>"
       data-id="<?php echo $product->product_id ?>"
       data-price="<?php echo $v ?>"
       data-size="<?php echo $k ?>"
       data-qty="1"
       class="add-to-cart">Заказать
    </a><br><br>
<?php endforeach;?>

Форма в карточке товара:
10e108d5e7da44f18a4a2ad50105ca43.png
При кнопке заказать данные должны попадать в корзину, как мне получить в корзине эти данные?
Если делать так как на данный момент написано в блоке ELSE, то каждое значение это отдельное поле, а у меня одно поле и в нем лежит ассоциативный массив.
  • Вопрос задан
  • 335 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
serialize() и unserialize() - крайне капризные штуки, а определенный момент пообещал себе больше никогда их не использовать. Для подобного есть JSON. А в yii есть удобный хелпер:
www.yiiframework.com/doc-2.0/yii-helpers-json.html

С сессией Вы тоже работаете минуя yii, что на мой взгляд не верно.

Вот пример Вашей логики:
public static function addToCart($product, $qty = 1)
    {
        if($cart = Yii::$app->session->has('cart')) {
            $cart = Json::decode($cart);
            $cart[$product_id]['qty'] += $qty;
        } else {
            $cart[$product_id] = [
                'qty' => $qty,
                'name' => $product->name,
                'price' => $product->price,
                'img' => $product->img
            ];
        }
        Yii::$app->session->set('cart',Json::encode($cart));
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ответ написан
Комментировать
Immortal_pony
@Immortal_pony
unserialize()

И еще.
Во-первых, в Yii есть обертка над сессией.
Во-вторых, для Yii есть готовые компоненты магазинов. От одного из разработчиков Yii, например.
Ответ написан
Ваш ответ на вопрос

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

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