Ответы пользователя по тегу Yii
  • Как вывести дерево категорий в Grid View в yii2 как на Вордпрессе?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Вот так, если работаете c NestedSets

    /**
     * @property integer $id
     * @property string $name
     * @property string $slug
     * @property string $title
     * @property string $description
     * @property integer $lft
     * @property integer $rgt
     * @property integer $depth
     * @property Meta $meta
     *

    [
                            'attribute' => 'name',
                            'value' => function (Category $model) {
                                $indent = ($model->depth > 1 ? str_repeat('  ', $model->depth - 1) . ' ' : '');
                                return $indent . Html::a(Html::encode($model->name), ['view', 'id' => $model->id]);
                            },
                            'format' => 'raw',
                        ],
    Ответ написан
  • Как работает Rbac в Yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Изучите уже его) Полно же примеров и описания!
    https://habr.com/ru/post/235485/
    https://anart.ru/yii2/2016/04/11/yii2-rbac-ponyatn...
    Ответ написан
    Комментировать
  • Как вы вывести элементы по id через свзяанную таблицу в Yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Добавьте ->orderBy('id ASC'); к условию.

    public function getUser(){
            return $this->hasMany(User:className(), ['id' => 'id_user'])
                ->viaTable('zakaz_tovar', ['id_tovar' => 'id'])->orderBy('id_tovar ASC');
        }
    
    public function getUser(){
            return $this->hasMany(User:className(), ['id' => 'id_user'])
                ->viaTable('zakaz_tovar', ['id_tovar' => 'id'])->orderBy('id DESC');
        }
    Ответ написан
    Комментировать
  • Yii2 в каком файле прописывать правила для RBAC?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
  • Как сформировать красивые ссылки на Yii 2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1 комментарий
  • Yii2 почему не могу получить связанные данные?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Откуда же знать что не так? Где структура таблиц или сущностей? Может вы связь настроили не так? Может ID такого нет!

    Скорее всего так. Поменять местами ID, но без структуры н скажешь:
    public function getLikes() {
          return $this->hasMany(PostLikes::className(), ['post_id' => 'like_id']);
        }
    Ответ написан
    1 комментарий
  • YII2 При переносе с локального ПК на хостинг одна модель не видит другую. Какие могут быть причины?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    У вас модеть user, а не User? Проблема с регистром!
    Поменяйте 'app\models\user' на 'app\models\User'
    Ответ написан
    Комментировать
  • Почему не может найти класс LoginForm в Yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Если 100% класс лежит в папке models, то проверьте composer.json.

    "autoload": {
        "psr-4": {
          "app\\": ""
        }
      },


    Если и это не поможет, то проверьте написание класса. Возможно какая-то буква в классах не заглавная или вообще в классе оказалась русская буква
    Ответ написан
    Комментировать
  • Как использовать единые сессии на разных доменах и сайтах?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    'components' => [
            'cache' => [
                'class' => 'yii\caching\FileCache',
                'cachePath' => '@frontend/runtime/cache' //делаем общий кеш
            ],
            'request' => [
                'csrfParam' => '_csrf-myap', //тоже делаем такое же как и на frontend
                'cookieValidationKey' => 'nk34HGdd8w6rf', //тоже делаем такое же как и на frontend
            ],


    'user' => [
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_identity',
            'httpOnly' => true,
            'domain' => '.' . DOMAIN,
        ],
    ],
    'session' => [
        'cookieParams' => [
            'domain' => '.' . DOMAIN,
            'httpOnly' => true,
        ],
    ],


    В индекс
    defined('DOMAIN') or define('DOMAIN', 'mysite.com');
    Ответ написан
  • Yii2 HTTP Basic аутентификация, как сделать?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Надо не на форум ползать. А в документацию.

    Вот вам готовый пример.

    Вам Дмитрий когда-то давал видео Елисеева Дмитрия по API. Вы сначала изучите, посмотрите, потом вопросов не останется. Если лень смотреть долго, то есть Кратче у Максима
    Ответ написан
    7 комментариев
  • Cистема realtime уведомлений в crud приложении. Как организовать?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Можете все события хранить в в базе mysql и работать без использования websoket. Как на тостере. Пример.
    Ответ написан
    Комментировать
  • Почему так долго отвечает API?

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

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

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

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

    3. Если на локальном тормозит, то тут, возможно. Так как в режиме разработки много чего работает ресурсоемкого типа дебаг.
    Ответ написан
    Комментировать
  • Смысл модулей в 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
    Ответ написан
    Комментировать
  • Как в 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() : 'БЕЗ ИМЕНИ!'; 
        }
    Ответ написан
  • Где расположить вызов хранимых процедур в 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 сделать роут на .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


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