elisdn / yii2-demo-shop Goto Github PK
View Code? Open in Web Editor NEWSource code for Yii2 workshop
Home Page: https://elisdn.ru/yii2-shop
License: Other
Source code for Yii2 workshop
Home Page: https://elisdn.ru/yii2-shop
License: Other
При внисении изменений в UserManageService вылетает ошибка Can not instantiate yii\rbac\ManagerInterface.
Роль пользователю прописана.
Не могу отловить из-за чего ошибка
запускаю миграции
вылетает ошибка нет таблицы
Table 'myshop.auth_assignments' doesn't exist
после первональной установки репозитория
проходишь регистрацию и требуется ввести номер телефона
нужно в SignupService добавить
$user = User::requestSignup(
$form->username,
$form->email,
$form->phone, // не хватает
$form->password
);
Вроде фремфорк обновлен но не подгружаются миграции.
Yii Migration Tool (based on Yii v2.0.35)
Creating migration history table "migration"...Done.
PHP Warning 'yii\base\ErrorException' with message 'strncmp() expects parameter 1 to be string, array given'
in /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/BaseYii.php:133
Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleError()
#1 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/BaseYii.php(133): strncmp()
#2 /var/www/html/yii2-demo-shop/vendor/fishvision/yii2-migrate/controllers/MigrateController.php(111): yii\BaseYii::getAlias()
#3 /var/www/html/yii2-demo-shop/vendor/fishvision/yii2-migrate/controllers/MigrateController.php(79): fishvision\migrate\contro llers\MigrateController->getMigrationPaths()
#4 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(167): fishvision\migrate\cont rollers\MigrateController->getNewMigrations()
#5 [internal function]: yii\console\controllers\BaseMigrateController->actionUp()
#6 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array()
#7 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams()
#8 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/console/Controller.php(164): yii\base\Controller->runAction()
#9 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/base/Module.php(528): yii\console\Controller->runAction()
#10 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction()
#11 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction()
#12 /var/www/html/yii2-demo-shop/vendor/yiisoft/yii2/base/Application.php(386): yii\console\Application->handleRequest()
#13 /var/www/html/yii2-demo-shop/yii(27): yii\base\Application->run()
Getting: Exception 'TypeError' with message 'Argument 1 passed to console\controllers\SearchController::console\controllers{closure}() must be an instance of shop\entities\Shop\Category, instance of shop\entities\Shop\Product\CategoryAssignment given' for some reason... The code is exactly like in repo and in the Video, but...
$ vagrant up
Bringing machine 'shop' up with 'virtualbox' provider...
==> shop: Box 'bento/ubuntu-16.04' could not be found. Attempting to find and install...
shop: Box Provider: virtualbox
shop: Box Version: >= 0
==> shop: Loading metadata for box 'bento/ubuntu-16.04'
shop: URL: https://vagrantcloud.com/bento/ubuntu-16.04
==> shop: Adding box 'bento/ubuntu-16.04' (v201710.25.0) for provider: virtualbox
shop: Downloading: https://vagrantcloud.com/bento/boxes/ubuntu-16.04/versions/201710.25.0/providers/virtualbox.box
shop:
==> shop: Successfully added box 'bento/ubuntu-16.04' (v201710.25.0) for 'virtualbox'!
There are errors in the configuration of this machine. Please fix
the following errors and try again:
vm:
* The 'hostmanager' provisioner could not be found.
Vagrant:
* Unknown configuration section 'hostmanager'.
После установки выдает
Too few arguments to function shop\entities\User\User::requestSignup(), 3 passed in /app/shop/useCases/auth/SignupService.php on line 35 and exactly 4 expected
в блоге с id напутали,
мне кажется нужен slug для тегов
class TagReadRepository
{
public function find($id): ?Tag
{
return Tag::findOne($id);
}
}
Дошел до создания брендов, но вылетает ошибка Getting unknown property: shop\forms\manage\Shop\BrandForm::name
Похоже ругается на CompositeForm return parent::__get($name)
If other categories are empty, throws Invalid argument supplied for foreach() exception.
The same applies to Existing tags
Wrong class is used, should be RelatedAssignment
The $products array will be empty If use ($products) is not added to the callback => no products will be save in the transaction
При создании 2-х UrlManager и конфигурации их как здесь
https://github.com/ElisDN/yii2-demo-shop/blob/master/backend/config/urlManager.php
return [
'class' => 'yii\web\UrlManager',
'hostInfo' => $params['backendHostInfo'],
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'' => 'site/index',
'<_a:login|logout>' => 'auth/<_a>',
'<_c:[\w\-]+>' => '<_c>/index',
'<_c:[\w\-]+>/<id:\d+>' => '<_c>/view',
'<_c:[\w\-]+>/<_a:[\w-]+>' => '<_c>/<_a>',
'<_c:[\w\-]+>/<id:\d+>/<_a:[\w\-]+>' => '<_c>/<_a>',
],
];
у меня на php 7.1.5 выдаёт ошибку
Notice: Undefined variable: params in ...\shop\frontend\config\urlManager.php on line 15
добавил такую проверку во всех urlManager
'hostInfo' => isset($params['backendHostInfo']) ? $params['backendHostInfo'] : null,
теперь не ругается.
Filter not work.
/backend/forms/Blog/CommentSearch.php
Not correct:
$query->andFilterWhere([ 'id' => $this->id, 'post_id' => $this->post_id, ]);
Need:
$query->andFilterWhere([ 'id' => $this->id, 'active' => $this->active, ]);
Не работают put, delete методы.
consumes
должен быть "application/x-www-form-urlencoded"
:
type
нужен string
. мы hash принимает, а не integer
Ну и соответственно здесь тоже:
yii2-demo-shop/api/config/main.php
Lines 95 to 96 in d08247c
P.S. лень делать pull 😃
Unknown Property – yii\base\UnknownPropertyException
Setting unknown property: yii\bootstrap\ActiveField::addon
Если положить товар в корзину будучи авторизованным,
то при выключении/удалении этого товара из админки
вылетает исключение при загрузке корзины из DBStorage.
Т.к. мы создаем массив объектов из активных товаров и один из элементов в массиве получает значение false, из чего и лезут ошибки.
Решил проблему моментальным удалением товара из корзины если не получилось создать объект Product.
DbStorage.php -> load()
$products = array_map(function (array $row) {
/** @var Product $product */
if ($product = Product::find()->active()->andWhere(['id' => $row['product_id']])->one()) {
return new CartItem($product, $row['modification_id'], $row['quantity']);
}
// Иначе удаляем не найденный/выключенный товар из корзины
$this->db->createCommand()->delete('{{%shop_cart_items}}', [
'user_id' => $row['user_id'],
'product_id' => $row['product_id'],
'modification_id' => $row['modification_id']
])->execute();
return false;
}, $rows);
return array_filter($products);
how to fix this error ?
Database Exception – yii\db\Exception
SQLSTATE[HY000]: General error: 1364 Field 'phone' doesn't have a default value
The SQL being executed was: INSERT INTO `users` (`username`, `email`, `password_hash`, `created_at`, `status`, `email_confirm_token`, `auth_key`, `updated_at`) VALUES ('admin', '[email protected]', '$2y$13$BIQRewDcb46WbkW88XpSbeH0PB/ETlYFypWbWfy2/LQS1MppkB4I.', 1498988396, 0, 'mCtz3qYvCOCZPWq_4DxnUGsq9rB-SE7y', 'H1cIGJM7pqo7jbASWzKy3fQVxO8E5bGq', 1498988396)
Error Info: Array
(
[0] => HY000
[1] => 1364
[2] => Field 'phone' doesn't have a default value
)
Дмитрий, на уроке добавления гибридного стораджа вы сказали, что это уберет проблему с проверкой корзины в куках.
Но в момент проверки есть ли в куках корзина, чтобы в последствии перекинуть ее в БД, она все равно лезет в куки .
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»
Нужно ставить нулл в "orders.delivery_method_id" при удалении способа доставки.
$this->addForeignKey('{{%fk-shop_orders-delivery_method_id}}', '{{%shop_orders}}', 'delivery_method_id', '{{%shop_delivery_methods}}', 'id', 'SET NULL');
При повторном добавлении товара в корзину с тем же модификатором добавляется новая запись, вместо увеличения количества
Почему-то в /shop/cart/CartItem.php ID модификатора приходит строкой...
Вылечил:
public function getId(): string
{
return md5(serialize([(int)$this->product->id, (int)$this->modificationId]));
}
До конца курса еще не дошел, но уже столкнулся с этой проблемой в 2х разделах, где реализован вложенный список через nested-set-behavior
Страницы:
/page/update?id=1
/shop/category/update?id=1
Файлы:
/backend/views/page/_form.php
/backend/views/shop/category/_form.php
Речь идет о селекте parentId
Решил исправить проблему повесив на option атрибут disabled.
В методе dropDownList() есть опция, позволяющая это сделать нативно.
<?= $form->field($model, 'parentId')->dropDownList( $model->parentsList(), ['options' => [Yii::$app->request->get('id') => ['disabled' => true]]] ) ?>
Дмитрий, если есть более изящное решение - подскажите. Пока только изучаю фреймворк.
Где будет правильнее перевести поля бд в текущей архитектуре приложения? Сейчас Yii::t()
не используется в коде. Если определить метод attributeLabels()
в сущностях (entities
), то их не видно, например, в формах (т.к. они не наследуются от сущностей). Делать в формах что-то вроде:
public function attributeLabels()
{
return $this->_category->attributeLabels();
}
тоже не очень как-то, да и не во всех формах есть доступ к сущности текущей. Дублировать тоже не хочется. Еще есть CompositeForm, MetaForm... Как?
vagrant@gradmash:/app$ ./yii
Exception 'Exception' with message 'Invalid MailChimp API key `` supplied.'
in /app/vendor/drewm/mailchimp-api/src/MailChimp.php:43
Stack trace:
#0 /app/common/bootstrap/SetUp.php(95): DrewM\MailChimp\MailChimp->__construct('')
#1 [internal function]: common\bootstrap\SetUp->common\bootstrap\{closure}(Object(yii\di\Container), Array, Array)
#2 /app/vendor/yiisoft/yii2/di/Container.php(163): call_user_func(Object(Closure), Object(yii\di\Container), Array, Array)
#3 /app/vendor/yiisoft/yii2/di/Container.php(456): yii\di\Container->get('shop\\services\\n...')
#4 /app/vendor/yiisoft/yii2/di/Container.php(370): yii\di\Container->resolveDependencies(Array, Object(ReflectionClass))
#5 /app/vendor/yiisoft/yii2/di/Container.php(156): yii\di\Container->build('shop\\useCases\\m...', Array, Array)
#6 /app/vendor/yiisoft/yii2/di/Container.php(456): yii\di\Container->get('shop\\useCases\\m...')
#7 /app/vendor/yiisoft/yii2/di/Container.php(370): yii\di\Container->resolveDependencies(Array, Object(ReflectionClass))
#8 /app/vendor/yiisoft/yii2/di/Container.php(156): yii\di\Container->build('console\\control...', Array, Array)
#9 /app/vendor/yiisoft/yii2/BaseYii.php(340): yii\di\Container->get('console\\control...', Array)
#10 /app/vendor/yiisoft/yii2/base/Module.php(638): yii\BaseYii::createObject('console\\control...', Array)
#11 /app/vendor/yiisoft/yii2/base/Module.php(591): yii\base\Module->createControllerByID('role')
#12 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(196): yii\base\Module->createController('')
#13 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(288): yii\console\controllers\HelpController->getCommandDescriptions()
#14 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(67): yii\console\controllers\HelpController->getDefaultHelp()
#15 [internal function]: yii\console\controllers\HelpController->actionIndex(NULL)
#16 /app/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#17 /app/vendor/yiisoft/yii2/base/Controller.php(156): yii\base\InlineAction->runWithParams(Array)
#18 /app/vendor/yiisoft/yii2/console/Controller.php(128): yii\base\Controller->runAction('', Array)
#19 /app/vendor/yiisoft/yii2/base/Module.php(523): yii\console\Controller->runAction('', Array)
#20 /app/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('', Array)
#21 /app/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('', Array)
#22 /app/vendor/yiisoft/yii2/base/Application.php(380): yii\console\Application->handleRequest(Object(yii\console\Request))
#23 /app/yii(27): yii\base\Application->run()
#24 {main}
при команде vagrant up появляется ошибка
" There are errors in the configuration of this machine. Please fix
the following errors and try again:
vm:
Vagrant:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.