• Почему так долго отвечает API?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. Это весь код, который используется? Покажите что у вас в форме метода register? Может там цикл какой-нибудь сложный - никто же не догадывается.

    2. Где у вас начинает тормозить? На production? Тогда проблема, скорее всего в самом сервере. Может быть какие-то подводные камни. Например, версия php, mysql. Сравните конфигурацию локальной Настройки и продакшн. Например, если на локальном использовать php7.2, а на продакшн php5.6, то разница очень большая в скорости. Но это вряд ли, конечено. Так же посмотрите включён ли OPCache. В общем тут нюансов много

    Обновите пакеты на продакшн сервере. composer update —no-dev. Эта команда отключит пакеты, которые нужны для разработки (тесты, Фиксиктуры). Не особо должно влиять, но работа будет чуть побыстрее.

    Ещё проверьте стоит ли на продакшн сервере константа prod

    3. Если на локальном тормозит, то тут, возможно. Так как в режиме разработки много чего работает ресурсоемкого типа дебаг.
    Ответ написан
    Комментировать
  • Как сделать, чтобы скидка не суммировалась?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Используйте более приятную кодом корзину. И проблем не будет. Там можно любые калькуляторы делать. Написана на чистом php. В вашем коде сложно разобраться даже и что-то подсказать. Код не читаем.
    Ответ написан
    2 комментария
  • Смысл модулей в Yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Как написано в документации:
    Модули - это законченные программные блоки, состоящие из моделей, представлений, контроллеров и других вспомогательных компонентов. При установке модулей в приложение, конечный пользователь получает доступ к их контроллерам. По этой причине модули часто рассматриваются как миниатюрные приложения. В отличии от приложений, модули нельзя развертывать отдельно. Модули должны находиться внутри приложений.


    Исходя из определения Модули (микросервисы) существуют для изоляции разных частей сайта друг от друга. Благодаря слабой связанности и сопряженности Модуля, можно менять одну часть сайта на другую без поломок других. При этом нужно учитывать, что база данных таких модулей тоже должна быть независима, а общаются такие модули между друг другом через API или события приложения, когда модули на одном сервере.

    При поломке одного модуля — не ломается все приложение. На эту тему можно прочитать статью Как проектировать табуретку?. Когда-то отвечал на подобную тему на Toster.

    Архитектуру Модулей в приложении вы можете придумать сами. Главное, чтобы доменный слой был независимым. Под модули можете сделать отдельную корневую папку с названием модуля:
    - Backend
    - Frontend
    - Shop
    - Blog

    Или же сгруппировать:
    - Backend
    - Frontend
    - Modules
    - Modules/Shop
    - Modules/Blog

    Контроллеры и вид при этом будут просто разделены по папкам модулей:
    - Backend/Controller/Shop
    - Backend/Controller/Blog
    - Frontend/Controller/Shop
    - Frontend/Controller/Blog
    
    Например,
    так или так. Разделение в Models делите все по папкам модулей:
    Model/Shop
    Model/Blog

    Подведя итог:
    1. Модуль служит для изоляции отдельных частей приложения на разные детали. При поломке двигателя не сломается шасси. Шасси можно поменять на шасси от другого авто, при этом двигателю всё равно на каком шасси автомобиль.
    2. Модуль можно переиспользовать в других проектах или выложить в отдельный репозиторий и подключать в composer.
    3. Хорошо структурированный, читаемый и понятный код. Сопровождаемость.
    4. Тестируемость
    5. Горизонтальное масштабирование.
    и др.

    Разделение модулей происходит по папкам следуя стандартам PSR7.

    Полезные статьи на схожую тему:
    1. https://toster.ru/q/659155
    2. Мой вопрос на форуме
    3. Организация независимых модулей на Yii2
    Ответ написан
    Комментировать
  • Какие рабочие blog bundles есть на Symfony 4?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Ответ написан
    Комментировать
  • Как создать БД с дефисом/тире в имени?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Не использовать дефис или менять на _
    Ответ написан
    Комментировать
  • Как в yii2 получить все роли и их children RBAC Phpmanager?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. Вы работали когда-нибудь с массивами? Если да, то тогда получите эти Файлы Посмотрите как у вас устроены эти Файлы и достаньте из массива списки.

    2. Для чего вам получать роли? RBAC реализует контроль доступа, а не отображение ролей у пользователя. По хорошему роли вообще делать отдельно.
    Ответ написан
  • Как организовать вложенные категории и страницы?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Хорошо, что вы уже знаете про nested sets. Вам только нужно разобраться как это сделать. Надеюсь, уже погуглили эту тему и имеете представление. Осталось понять, как это сделать на Yii. Для него есть готовое расширение

    Двумя словами это не описать. Дмитрий Елисеев в своём уроке Yii shop как раз показывает как это сделать. Можете найти урок и посмотреть.
    Ответ написан
    Комментировать
  • Как получить переменную user->identity во view?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Боюсь вас огорчить, но другого способа нет)) Для этого и есть специально Identity, чтобы работать с авторизованным юзером.

    Единственное я бы разделил аутентификацию и юзеров. Тогда вы можете добавить там свой метод и реализовать такое:

    public function getName(): string
        {
           //Здесь ваша проверка
            return $this->user ? $this->user->getName() : 'БЕЗ ИМЕНИ!'; 
        }
    Ответ написан
  • Как исползовать монолог если нет возможности получить контейнер?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Бандл монолога симфони делает обёртку над монологом. Вы можете абстрагироваться от обоих и сделать свой логгер. И там уже хоть оригинальный используйте, хоть монолог. Но при этом реализуйте PSR LoggerInterface.

    Пример из документации:
    <?php
    use Monolog\Logger;
    use Monolog\Handler\StreamHandler;
    
    // create a log channel
    $log = new Logger('name');
    $log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
    
    // add records to the log
    $log->warning('Foo');
    $log->error('Bar');
    Ответ написан
  • Где расположить вызов хранимых процедур в yii?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Используйте репозиторий и пишите там хоть на SQL хоть на AR

    А уже там вызываете подобное:
    $result = \Yii::$app->db->createCommand("CALL coverage_dis_prof(@r,:prof, :dis);")
                ->bindValue(':prof' , 2)
                ->bindValue(':dis', 31)->execute();
    $rez=Yii::$app->db->createCommand("SELECT @r;")->queryScalar();
    Ответ написан
    Комментировать
  • Как получить yii\web\Application Object(Yii:$app) frontend из backend в yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Yii:$app->controller получает текущий контроллер. Не важно где вы находитесь. Скорее всего вы имели ввиду роутинг между frontend и backend.

    Что бы во frontend иметь возможность формировать ссылки на контроллеры backend необходимо вo frontend добавить новый urlManager

    В \progect\frontend\config\main.php добавьте следующий компонент
    'urlManagerBackend' => [
                'class' => 'yii\web\urlManager',
                'baseUrl' => 'http://yoursitedomain.ru',
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => require(__DIR__ . '../backend/routes.php'),
            ],

    После это вы можете легко создавать ссылки на backend из frontend используя второй менеджер
    Yii::$app->urlManagerBackend->createUrl(['controller/action', 'parametr1' => 'value1']),


    Обратите внимание что правила роутинга вынесены в отдельный файл т.к. эти правила будут использоваться как в urlManager backend, так и в urlManagerBackend во frontend. Это избавляет нас от дублирования.

    Аналогичным образом вы сможете настроить формирование ссылок на frontend из backend

    Если вам нужно именно получить все роуты в системе, то можно посмотреть как это реализовано популярном в расширении RBAC
    Ответ написан
    1 комментарий
  • Как реализовать создание постов в мультиязычной yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Если кратко, по делу и быстро, то вот готовое расширение на гитхаб.

    Так же, у всем известного Дмитрия Елисеева, есть на эту тему статья. Правда она для первой версии, но суть не меняется.

    Думаю, что этого материала будет достаточно).
    Ответ написан
    Комментировать
  • Почему Yii2 ставится в папку vendor/yiisoft/yii2, а не vendor/yiisoft/yii2/framework?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Потому что вы запускаете команду пакета установки create-project --prefer-dist yiisoft/yii2, который лежит в тут. А куда вы ссылку дали это yii-dev для разработки. Да и вообще какая вам разница как там хранится этот фреймворк?))
    Ответ написан
  • Что делать после изучение html + css?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Ну, во-первых, HTML5 и CSS3. Очень желательно знать тонкости поддержки браузеров, и, в случае надобности, верстать "кроссбраузерно", в разумных пределах конечно. Также желательно уметь верстать с макета. Еще нынче важно знать CSS-фреймворки, обычно это Bootstrap, реже Foundation. Ну и также хорошо бы знать методологии верстки, например БЭМ.

    Во-вторых, JavaScript. Тут тоже поле непаханное на самом деле. Тоже надо знать про поддержку браузерами разных ходов. Много где требуют как умение работать с jQuery, так и специально без него. Также кое-где требуют знания ES6 (последняя спецификация JS со всякими полезными приблудами).

    В-третьих, JS-фреймворки и все такое. Обычно это Angular.js и React.js, но тут такая ситуация, что их сложно понять и осознать без знания паттернов проектирования, так что тоже в копилочку ;)

    В-четвертых, иногда требуется знания всяких инструментов для более удобной разработки: автоматизирующие сборщики (Gulp.js, Grunt, Webpack и.т.д.), препроцессоры CSS (SASS, Stylus, и.т.д.); шаблонизаторы (Jade, и.т.д.) . Этих инструментов много разных, но учить их несложно и некоторые друг на друга похожи.

    В-пятых, это вообще для всех командных программистов нужно - знание git. Тоже несложно, можно проникнутся и начать использовать за пару дней )

    В-шестых, базовое понимание веб-дизайна и UI/UX тоже важно, ведь фронтендер работает с интерфейсом непосредственно.

    и.т.д...

    Ну а так, предел возможностей и знаний недосягаем, но для поиска первой работы, в целом, достаточно добротного знания Html&CSS&JS, и небольшого портфолио, эти знания демонстрирующие :)
    Ответ написан
    3 комментария
  • Можно ли в yii2 сделать роут на .php файл?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Настройте .htassets так, чтобы все запросы шли в web/index.php , а все запросы начинающиеся на /views шли в папку views

    Примерно так:
    Options +FollowSymLinks
    IndexIgnore */*
    RewriteEngine on
     
    # Если запрос начинается с /views, то заменяем на /views
    RewriteCond %{REQUEST_URI} ^/views
    RewriteRule ^ views\/?(.*) /views/$1
     
    # Добавляем другой запрос /web/$1
    RewriteCond %{REQUEST_URI} !^/(web|views)
    RewriteRule (.*) /web/$1


    Но вообще не понятен вопрос. Надо более развёрнуто написать
    Ответ написан
    Комментировать
  • Обработка изображений товаров для сайта, как правильно реализовать?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Сочетайте все три способа вместе!

    1. На подстраховку задайте в css размеры изображений и чтобы он их обрезал.
    2. Сохраняйте оригинал файла. А уже от этого оригинала генерируйте обрезанные копии для разных частей сайта:

    - Для корзины надо 50х50px
    - Для админки 100х100px
    - Для списка товаров 300х400px
    - Для просмотра товара 1000х1000px и ещё с водяным знаком.

    В таком случае вы папки изображений разделяете на две:
    - original (оригинальные фалы)
    - cache (сгенерированные из оригинала под нужные размеры).

    В дальнейшем можно удалить просто папку cache и сгенерировать новые по нужным размерам из оригиналов папки original без опаски удаление оригинала и опаски потерять оригинал совершив ошибку при обрезке.

    Сохранение оригинала ещё поможет в будущем... Например, если изменится вёрстка и нужно будет пересоздать файлы под другие размеры.

    На Yii для этого есть замечательная библиотека, которая реализует такой подход

    Пример настройки:
    public function behaviors(): array
        {
            return [
                [
                    'class' => ImageUploadBehavior::className(),
                    'attribute' => 'photo',
                    'createThumbsOnRequest' => true, //Создавать при запросе (если файлы из cache удалить, то они снова сгенерируются под новым размерам указаных ниже)
                    'filePath' => '@staticRoot/origin/posts/[[id]].[[extension]]',
                    'fileUrl' => '@static/origin/posts/[[id]].[[extension]]',
                    'thumbPath' => '@staticRoot/cache/posts/[[profile]]_[[id]].[[extension]]',
                    'thumbUrl' => '@static/cache/posts/[[profile]]_[[id]].[[extension]]',
                    'thumbs' => [
                        'admin' => ['width' => 100, 'height' => 70],
                        'thumb' => ['width' => 640, 'height' => 480],
                        'blog_list' => ['width' => 1000, 'height' => 150],
                        'widget_list' => ['width' => 228, 'height' => 228],
                        'origin' => ['processor' => [new WaterMarker(1024, 768, '@frontend/web/image/logo.png'), 'process']],
                    ],
                ],
            ];
        }


    Вы так же можете сделать такой подход со своей написанной библиотекой. Но подход такой достаточно хороший и логичный. На него я бы делал больше упор, чем на остальные пункты.

    3. Лучше не предупреждать что будет обрезано, а в момент загрузке на js показать как будет выглядеть изображение на всех видах верстки. Но можно и просто написать.

    Вообще это идеальный вариант. Вы можете использовать самый простой вариант и работать с простой и удобной библиотекой. Или любой другой популярной написанной на чистом php. Решать вам)
    Ответ написан
    6 комментариев
  • Пути к файлам и ресурсам на shared hosting Yiii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    namespace common\modules\blog\assets;
    use yii\web\AssetBundle;
    /**
     * Main blog asset bundle.
     */
    class BlogAsset extends AssetBundle
    {
        public $sourcePath = '@common/modules/blog/assets';
        public $css = [
        ];
        public $js = [
            'js/script.js'
        ];
        public $depends = [
        ];
    }


    use common\modules\blog\assets\BlogAsset; 
    BlogAsset::register($this);
    Ответ написан
  • Как получить данные после фильтрации в yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. Запросы это ответственность не сущности, а отдельного репозитория. В Yii можно сделать модель Query. Например PostQuery. Там и делать этот запрос. Из PostSearch вы вызываете этот метод.
    3. Не совсем понял в чем проблема. Но если правильно понял, то вы говорите о связях. Используете связи.

    https://www.yiiframework.com/doc/guide/2.0/ru/db-a...

    Раздел «объявление связей»
    Ответ написан
    Комментировать