/** * Добавление элемента каталога в корзину * @param int $id идентификтор элемента каталога * @param string $class класс элемента каталога * @param int $qty количество * @param array $attrs дополнительные атрибуты для сохранения, передаваемые клиентом * @throws ErrorException * @throws \yii\base\InvalidConfigException */ public function add($id, $class, $qty = 1, $attrs = []) { $model = $class::findOne($id); if (!$model or !$model instanceof IShopItem) { throw new ErrorException("Request model does`t implement \\app\\modules\\shop\\components\\IShopItem interface"); } $good = Yii::createObject(Good::className()); $good->qty = $qty; $this->configureGood($good, $model, $attrs); $order = $this->getOrder(); $order->addNewGood($good); $this->orderManager->saveOrder($order); }
/** * Действия * @return array */ public function actions() { $class = Good::className(); return ['index' => ['class' => crud\Admin::className(), 'modelClass' => $class], 'create' => ['class' => crud\Create::className(), 'modelClass' => $class], 'update' => ['class' => crud\Update::className(), 'modelClass' => $class], 'view' => ['class' => crud\View::className(), 'modelClass' => $class], 'delete' => ['class' => crud\Delete::className(), 'modelClass' => $class], 'groupdelete' => ['class' => crud\GroupDelete::className(), 'modelClass' => $class], 'editable' => ['class' => crud\XEditable::className(), 'modelClass' => $class]]; }
/** * Связь с заказанными товарами * @return \yii\db\ActiveQuery */ public function getGoods() { return $this->hasMany(Good::className(), ["order_id" => "id"]); }
<?php use app\modules\shop\models; return ['controllerMap' => ['migrate' => ['migrationLookup' => ['@webapp/modules/shop/migrations']]], 'modules' => ['shop' => ['class' => 'app\\modules\\shop\\Shop', 'modelClasses' => ['app\\modules\\catalog\\models\\Catalog'], 'components' => ['orderLetters' => \app\modules\shop\components\OrderLetters::className(), 'clientNotifier' => \app\modules\shop\components\ClientNotifier::className(), 'adminNotifier' => \app\modules\shop\components\AdminNotifier::className(), 'basket' => ['class' => \app\modules\shop\components\Basket::className(), 'components' => ['orderManager' => ['class' => \app\modules\shop\components\OrderManager::className()]]]], 'controllerNamespace' => 'app\\modules\\shop\\controllers', 'modules' => ['admin' => ['class' => 'app\\modules\\shop\\modules\\admin\\Admin', 'controllerNamespace' => 'app\\modules\\shop\\modules\\admin\\controllers', 'menuItems' => function () { return [['label' => Yii::t('shop/app', 'Shop module'), 'icon' => 'glyphicon glyphicon-shopping-cart', 'items' => [['label' => Yii::t('shop/app', 'Orders'), 'url' => ['/admin/shop/order'], "permission" => ["listModels", ["model" => Yii::createObject(models\Order::className())]]], ['label' => Yii::t('shop/app', 'Goods'), 'url' => ['/admin/shop/good'], "permission" => ["listModels", ["model" => Yii::createObject(models\Good::className())]]], ['label' => Yii::t('shop/app', 'Statuses'), 'url' => ['/admin/shop/status'], "permission" => ["listModels", ["model" => Yii::createObject(models\Status::className())]]], ['label' => Yii::t('shop/app', 'Payments'), 'url' => ['/admin/shop/payment'], "permission" => ["listModels", ["model" => Yii::createObject(models\Payment::className())]]], ['label' => Yii::t('shop/app', 'Deliveries'), 'url' => ['/admin/shop/delivery'], "permission" => ["listModels", ["model" => Yii::createObject(models\Delivery::className())]]]]]]; }]]]], 'components' => ['i18n' => ['translations' => ['shop/*' => ['class' => 'yii\\i18n\\PhpMessageSource', 'basePath' => '@webapp/modules/shop/messages', 'fileMap' => ['shop/app' => 'app.php']]]], 'urlManager' => ['rules' => ['shop/orders-rest/update/<id:\\d+>' => 'shop/orders-rest/update']]]];