• Что за ошибка в yii2-user при выходе?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Перевод ошибки:

    Ошибку typeerror аргумент 1 принят к приложение\контроллеры\пользователь\SecurityController::getUserEvent() должен быть экземпляр dektrium\пользователь\модели\Пользователь, экземпляр приложения\модели\пользователя, данные, называется в /применения/mamp/htdocs в/строительного/контроллеры/пользователей/SecurityController.php в строке 153


    Судя по ошибке ругается, что используется другая модель вместо app\models\User должна быть dektrium\user\models\User

    Смотрите где подключаете и используете базовую модель и измените на dektrium\user\models\User

    Возможно поможет добавить в конфиг
    //.......
    'user' => [
                'identityClass' => dektrium\user\models\User',
                //...
            ],
    //.......
    Ответ написан
  • Реально ли ограничить доступ к странице не используя велосипед RBAC?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    public function behaviors()
        {
            return [
                'access' => [
                    'class' => \yii\filters\AccessControl::className(),
                    'rules' => [
                        // allow authenticated users
                        [
                            'allow' => true,
                            'matchCallback' => function ($rule, $action) {
                                if (Yii::$app->user->id == 1){
                                    return false;
                                } else {
                                    return true;
                                }
    
                            }
                        ],
                        // everything else is denied
                    ],
                 ],
            ];
        }
    Ответ написан
    4 комментария
  • Yii как настроить htaccess для api?

    myks92
    @myks92 Автор вопроса, куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    # Если запрос начинается с /api, то заменяем на /api/web/
    RewriteCond %{REQUEST_URI} ^/api
    RewriteRule ^.*$ /api/web/$1
    Ответ написан
    Комментировать
  • Yii как скачать папку архивом с сайта через http?

    myks92
    @myks92 Автор вопроса, куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    public function actionDownloadMultiple()
        {
            $error = "";
            if(isset($_POST['createpdf']))
            {
                $post = $_POST;
                $file_folder = "files/"; // папка с файлами
                if(extension_loaded('zip'))
                {
                    if(isset($post['files']) and count($post['files']) > 0)
                    {
                        // проверяем выбранные файлы
                        $zip = new ZipArchive(); // подгружаем библиотеку zip
                        $zip_name = time().".zip"; // имя файла
                        if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE)
                        {
    
                            $error .= "* К сожалению, создание ZIP не удалось";
                        }
                        foreach($post['files'] as $file)
                        {
                            $zip->addFile($file_folder.$file); // добавляем файлы в zip архив
                        }
                        $zip->close();
                        if(file_exists($zip_name))
                        {
                            // отдаём файл на скачивание
                            header('Content-type: application/zip');
                            header('Content-Disposition: attachment; filename="'.$zip_name.'"');
                            readfile($zip_name);
                            // удаляем zip файл если он существует
                            unlink($zip_name);
                        }
    
                    }
                    else
                        $error .= "* Пожалуйста, выберите файлы";
                }
                else
                    $error .= "* У вас нет расширения ZIP";
            }
    
        }
    Ответ написан
    Комментировать
  • Как показать только один блог при печати?

    myks92
    @myks92 Автор вопроса
    Нашёл решение — пометь вопрос ответом!
    Такой способ работает!
    @media print {
      * {
        visibility: hidden !important;
      }
    
      .print, .print * {
        visibility: visible !important;
      }
    
      .print {
        position: fixed;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
      }
    }
    Ответ написан
    Комментировать
  • Как вывести месяц на русском yii2 formatter?

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

    Если нужно Что-то такое
    15 мая 2018
    , то такой код подойдет
    <?= Yii::$app->formatter->asDate($item->date, 'long')?>


    Если же просто месяц, например
    мая

    <?= Yii::$app->formatter->asDate($item->date, 'php:M')?>


    Если по вашим данным, то
    <?= Yii::$app->formatter->asDate($item->date, 'php:d.M H:i')?>


    Если же не переводится язык, то нужно смотреть php.init у меня была такая же проблема решил именно в этом файле. При переводе скорее всего проблема в сервере, а не фреймворке

    В самом верху конфиге должно стоять:
    'language' => 'ru-RU',
        'timeZone' => 'Europe/Moscow',
    Ответ написан
    3 комментария
  • Yii Search Model - как сделать поиск по нескольким полям?

    myks92
    @myks92 Автор вопроса, куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Решение может быть таким, используя "CONCAT_WS":

    $query = new Query();
                $query->select(['profile.user_id as id, CONCAT_WS(" ", profile.last_name, profile.name, profile.middle_name) AS text'])
                    ->from('profile')
                    ->leftJoin('user','profile.user_id = user.id','user.id = 10')
                    ->leftJoin('auth_assignment','auth_assignment.user_id = profile.user_id')
                    ->where('CONCAT_WS(" ", last_name, name, middle_name) LIKE :search')
                    ->params([':search' => '%' . $search . '%'])
                    ->orderBy(['last_name' => 'SORT_ASC', 'name' => 'SORT_ASC', 'middle_name' => 'SORT_ASC'])
                    ->andWhere(['auth_assignment.item_name'=>'organizer'])
                    ->andWhere(['user.status'=>\common\models\User::STATUS_ACTIVE])
                    ->limit(20);
                $command = $query->createCommand();
                $data = $command->queryAll();
    Ответ написан
    Комментировать
  • Как соединить поля в ArrayHelper::map?

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

    /**
         * @return string User full name
         */
        public function getFullName()
        {
            return $this->name . ' ' . $this->surname;
        }


    обращаться нужно так:

    return ArrayHelper::map(self::find()->all(), 'id', 'fullName');


    Обратите внимание. getFullName() должен быть в той модели, к которой обращаетесь. В данном случае self

    В getFullName() Можете выводить и массив и что угодно под Ваши требования
    Ответ написан
    1 комментарий
  • Yii2 Как лучше сделать несколько профилей?

    myks92
    @myks92 Автор вопроса, куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Один из вариантов решения: https://habrahabr.ru/post/274925/
    Ответ написан
    Комментировать
  • Как сделать gridview responsive?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Пропишите после 'filterModel' => $searchModel.

    'responsive' => true,

    Уберите лишнюю запятую в ответе выше
    Ответ написан
    Комментировать
  • Как сделать сложную форму из нескольких полей + Ajax?

    myks92
    @myks92 Автор вопроса, куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. Установить виджет Динамических полей
    2. Устранить баг при работе Select2 от Kartik. Для этого строки с 439 по 476 файла "yii2-dynamic-form.js" заменить на

    // "kartik-v/yii2-widget-select2"
        var $hasSelect2 = $(widgetOptionsRoot.widgetItem).find('[data-krajee-select2]');
        if ($hasSelect2.length > 0) {
            $hasSelect2.each(function() {
                var id = $(this).attr('id');
                var configSelect2 = eval($(this).attr('data-krajee-select2'));
    
                if ($(this).data('select2')) {
                    $(this).select2('destroy');
                }
    
                var configDepdrop = $(this).data('depdrop');
                if (configDepdrop) {
                    configDepdrop = $.extend(true, {}, configDepdrop);
                    $(this).removeData().off();
                    $(this).unbind();
                    _restoreKrajeeDepdrop($(this));
                }
                var s2LoadingFunc = typeof initSelect2Loading != 'undefined' ? initSelect2Loading : initS2Loading;
                var s2OpenFunc = typeof initSelect2DropStyle != 'undefined' ? initSelect2Loading : initS2Loading;
                $.when($('#' + id).select2(configSelect2)).done(s2LoadingFunc(id, '.select2-container--krajee'));
    
                var kvClose = 'kv_close_' + id.replace(/\-/g, '_');
    
                $('#' + id).on('select2:opening', function(ev) {
                    s2OpenFunc(id, kvClose, ev);
                });
    
                $('#' + id).on('select2:unselect', function() {
                    window[kvClose] = true;
                });
    
               if (configDepdrop) {
                    var loadingText = (configDepdrop.loadingText) ? configDepdrop.loadingText : 'Loading ...';
                    initDepdropS2(id, loadingText);
                }
            });
        }       
    
        /*
        // "kartik-v/yii2-widget-select2"
        var $hasSelect2 = $(widgetOptionsRoot.widgetItem).find('[data-krajee-select2]');
        if ($hasSelect2.length > 0) {
            $hasSelect2.each(function() {
                var id = $(this).attr('id');
                var configSelect2 = eval($(this).attr('data-krajee-select2'));
                $(this).select2('destroy');
                $.when($('#' + id).select2(configSelect2)).done(initS2Loading(id));
    
                $('#' + id).on('select2-open', function() {
                    initS2Open(id)
                });
    
                if ($(this).attr('data-krajee-depdrop')) {
                    $(this).on('depdrop.beforeChange', function(e,i,v) {
                        var configDepdrop = eval($(this).attr('data-krajee-depdrop'));
                        var loadingText = (configDepdrop.loadingText)? configDepdrop.loadingText : 'Loading ...';
                        $('#' + id).select2('data', {text: loadingText});
                    });
                    $(this).on('depdrop.change', function(e,i,v,c) {
                        $('#' + id).select2('val', $('#' + id).val());
                    });
                }
            });
        }
        */
    Ответ написан
    Комментировать
  • Ошибка. Как сделать миграцию в yii2?

    myks92
    @myks92 Автор вопроса, куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    - root обычно это root, но на всякий случай проверьте есть ли у него права на базу crm
    - каждый root из списка это разные пользователи, т.е. root@localhost и root@127.0.0.1 это разные пользователи и соответственно у них могут быть разные права на БД, разные пароли и т.д.
    - попробуйте с каждым подключиться
    - проверьте находится ли сервер MySQL на том же сервере где и ваш вебсервер с php (банально, но все же). Это тот самый MySQL сервер к которому вы пытаетесь подключиться или может быть ваша БД crm где-то в другом месте крутиться
    - проверьте наличие файлов базы данных crm на сервере
    - настройки allow local access only тут вообще не причем
    - проблема может быть в использовании сокета для процесса MySQL, попробуйте в настройках сервера MySQL вместо сокета использовать порт 3306
    - xampp это лучшее решение(apache+php+mysql) для разработки на Windows которое я встречал(а встречал я их почти все))), но если вы будете разбираться в том как настраиваются и связываются компоненты, то для вас вопрос будет не в выборе готового решения
    - с какой учетной записью вы подключаетесь к phpMyAdmin (хост(url), логин, пароль)
    - попробуйте подключиться к mysql из консоли (удаленно и локально), какие учетные записи могут подключиться
    - и в завершении проверьте квоты на место на диске для БД crm. Или вообще есть ли еще свободное месте на диске.
    Ответ написан
    Комментировать