• Почему мне кажется, что это говнокод?

    delphinpro
    @delphinpro
    frontend developer
    Держи еще вариант ГК

    $message = 'У юзера выпало %s, а у компьютера %s. %s';
    $resultMessages = ['Выигрыш компьтера', 'Ничья', 'Выигрыш игрока'];
    
    $userDice = mt_rand(1,6);
    $compDice = mt_rand(1,6);
    
    $diff = $userDice - $compDice;
    $result = ($diff ? $diff / abs($diff) : $diff) + 1;
    
    printf($message, $userDice, $compDice, $resultMessages[$result]);


    Рефакторим на php7 (минус две строки)
    $message = 'У юзера выпало %s, а у компьютера %s. %s';
    $resultMessages = ['Выигрыш компьтера', 'Ничья', 'Выигрыш игрока'];
    
    $userDice = mt_rand(1,6);
    $compDice = mt_rand(1,6);
    
    printf($message, $userDice, $compDice, $resultMessages[($userDice <=> $compDice) + 1]);
    Ответ написан
    6 комментариев
  • Как правильно создавать модули yii2 и для дальнейшего выкладывания на github?

    @sanex3339
    Если я вас правильно понял, то вот ответ:
    По поводу нейспейсов, есть 2 варианта. Если модуль ставите через composer, то в composer.json пишите
    "autoload": {
            "psr-4": { 
                ragnarek\\amazingmodule\\": "" 
            }
        },

    Т.е. это алиас до папки с модулем, которая лежит в папке с вашим vendor именем.
    После установки composer'ом, все это дело запишется в extensions.php.
    Соответственно, неймспейсы должны везде быть вида
    use ragnarek\amazingmodule\controllers;

    Если не через composer, то надо сразу же прописывать алиасы в extensions.php, посмотрите примеры других алиасов, в этом файле.

    Таким образом к классам модуля можно всегда обратиться через неймспейсы
    use ragnarek\amazingmodule;
    Ответ написан
    3 комментария
  • Как расширить DbManager в Yii2 что бы получить количество пользователей роли?

    @ryzhak
    Так а зачем расширять
    У вас же есть таблица auth_assignment, как вариант можно из нее обычным sql кол-во юзеров определенной роли вытаскивать

    Пример:
    В папке components создаете MyDBManager.php:
    namespace app\components;
    
    use yii\rbac\DbManager;
    
    class MyDBManager extends DbManager
    {
        /**
         * Возвращает количество пользователей определенной роли
         * 
         * @param string $role название роли
         * @return integer кол-во юзеров определенной роли
         */
        public function getUserCountByRole($role){
            return (new \yii\db\Query())
                ->select('user_id')
                ->from('tbl_auth_assignment')
                ->where('item_name = :role', [':role' => $role])
                ->count();
        }
    }


    Юзаем в контроллере:
    use app\components\MyDBManager;
        ...
        public function actionIndex()
        {
            $auth = new MyDbManager();
            echo $auth->getUserCountByRole("admin");
        }
    Ответ написан
    1 комментарий