• Как работать с полем SET в Yii2?

    qonand
    @qonand
    Software Engineer
    На текущий момент Yii2 не поддерживает полноценную работу с типом SET MySQL. Но Вы можете реализовать самостоятельно логику работы с данным типом дополнив Ваш класс ActiveRecord, например:

    /**
     * Ваш класс ActiveRecord описывающий таблицу содержащую поле с типом SET
     *
     * @property string $communication Название поля в таблице хранящее SET-значения
     * @property string[] $communicationArr Атрибут который будет обрабатывать все значения в виде массива
     */
    class MyAR extends \yii\db\ActiveRecord
    {
    
        /**
         * Формирование правил валидации атрибутов
         */
        public function rules()
        {
            return [
                // Ваши правила валидации атрибутов
                [
                    // правило валидации для поля типа SET
                    'communication',
                    'string'
                ]
            ];
        }
    
        /**
         * Формирование списка безопастных атрибутов
         */
        public function scenarios()
        {
            return [
                $this::SCENARIO_DEFAULT => [
                    // Список атрибутов которые можно загружать через метод load
                    'communicationArr'
                ] // атрибут с которым будем работать как с массивом
    
            ];
        }
    
        /**
         * Геттер свойства сommunicationArr
         */
        public function getCommunicationArr()
        {
            return explode(',', $this->communication);
        }
    
        /**
         * Cеттер свойства сommunicationArr
         */
        public function setCommunicationArr($value)
        {
            $this->communication = is_array($value) ? implode(',', $value) : '';
        }
    }


    а дальше просто работаете с атрибутом communicationArr ...
    Ответ написан
  • Как заполнить столбец в mysql случайными цифрами от 1 до 10?

    qonand
    @qonand
    Software Engineer
    UPDATE tablename SET filed_name = FLOOR(1 + (RAND() * 10));
    Ответ написан
    Комментировать
  • Как объединить 2 таблицы так чтобы одна перекрыла часть другой?

    qonand
    @qonand
    Software Engineer
    SELECT 
        table1.id, 
        IFNULL(table2.activity, table1activity) as activity
    FROM table1
    LEFT JOIN table2 ON table1.id = table2.id
    Ответ написан
    Комментировать
  • Yii2 Как подключать библиотеки которых нет на packagist?

    qonand
    @qonand
    Software Engineer
    Отсутствует на packagist, подключить через composer я его не могу.

    Почему не можете? отсутствие расширения на packagist еще не означает что композер не сможет его загрузить. Для того чтобы composer искал расширение на Вашем репозитории достаточно в файле composer.json прописать repositories, например:
    {
        "name": "MyApp",
        "description": "MyApp",
        "homepage": "",
        "type": "project",
        "license": "BSD-3-Clause",
        "support": {
            "issues": "https://github.com/yiisoft/yii2/issues?state=open",
            "forum": "http://www.yiiframework.com/forum/",
            "wiki": "http://www.yiiframework.com/wiki/",
            "irc": "irc://irc.freenode.net/yii",
            "source": "https://github.com/yiisoft/yii2"
        },
        "minimum-stability": "stable",
        "require": {
            // список ваших расширений
        },
        "require-dev": {
           // список ваших расширений
        },
        "repositories": [
            {
                "type": "git",
                "url": <ссылка на Ваш репозиторий>
            },		
        ],
    }
    Ответ написан
    1 комментарий
  • Как относится к такой документации yii?

    qonand
    @qonand
    Software Engineer
    есть два стандартных шаблона:
    - basic - шаблон самого простого проекта, где весь проект это ОДНО ЦЕЛОЕ приложение
    - advanced - более продвинутый шаблон, где сам проект разбит на ДВА ПРИЛОЖЕНИЯ - админку (backend) и пользовательскую часть (frontend). Каждое из этих приложений имеет свою конфигурацию.
    В документации описано подключение модуля к приложению в целом, показан сам принцип, т.к. шаблоны могут быть разные (например, сделанные сторонними разработчиками).
    Ответ написан
  • Можно ли начать писать класс отдельно от yii2, а потом вставить его в yii2 и что бы он сразу работал?

    qonand
    @qonand
    Software Engineer
    Вот я хочу сделать класс(сущность) для регистрации, статистика на сайте

    Сомневаюсь что у Вас это будет 1 класс, это скорее некий набор классов у Вас получиться (модуль)

    Могу ли я делать их отдельно(в другом проекте в отдельном файле), и потом вставить в yii2 и что бы они сразу так же заработали?

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

    qonand
    @qonand
    Software Engineer
    Рулесы в каждой модели отдельно для ихних рядков в бд? или можно все в одной этой модели ?

    Каждая модель описывает определенную таблицу, соответственно в классе каждой модели должны быть свои правила валидации для ее атрибутов

    И как сохранять собственно данные, типа через Эта модель->связь ->save() прокатит ?

    такого делать нельзя, нужно сохранять данные каждой модели отдельно, а потом их линковать, как это сделать указано в доке, ссылку на которую привел @uDenX

    Тоесть я хочу заполнить с одной формы все таблицы за раз, ясное дело что первичные вторичные ключи имметь будут одинаковые значение и 2 поля формы не нужно для одного значения

    дополнительные поля делать не нужно, Вы должны на сервере связывать модели
    Ответ написан
    2 комментария
  • Yii2 как загрузить массив из gridview?

    qonand
    @qonand
    Software Engineer
    Каждый экземпляр класса наследуемый от \yii\base\Model (в том числе и ActiveRecord) возвращает название формы, это название сначала используется для формирования инпутов через ActiveField, а потом и для загрузки данных с этих инпутов (в методе load). В Вашем же случае CheckboxColumn формирует инпуты без учета названия формы, а load пытается загрузить данные с учетом названия формы. Поэтому данные у Вас и не загружаются. Самое просто решение это сделать так:
    $model->load(Yii::$app->request->post(), '')
    Но конечно оборачивать GridView в ActiveForm это очень не тру.
    Ответ написан
    3 комментария
  • Как скрыть поля от определеных пользователей GridView?

    qonand
    @qonand
    Software Engineer
    Если я правильно понял задачу, то у Вас есть таблица в которой есть название поля (key_feild) и его значение (value), Вам соответственно для пользователей у которых нет разрешения canViewsSite нужно скрыть данные с key_field = 'site'

    Тогда непонятно зачем это делать на уровне GridView если можно просто выбрать данные по соответствующим условиям из БД. Например так:
    MyModel::find()->where(['not' in, 'key_field', 'site']);
    Ответ написан
    3 комментария
  • Почему не подключаются файлы в Yii2?

    qonand
    @qonand
    Software Engineer
    Замените .htaccess в корне на
    Options +FollowSymLinks
    IndexIgnore */*
    RewriteEngine on
    
    RewriteCond %{REQUEST_URI} ^/.*    
    RewriteRule ^(.*)$ web/$1 [L]
    
    RewriteCond %{REQUEST_URI} !^/web    
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ web/index.php
    Ответ написан
    1 комментарий
  • Как сделать динамическое определение роли в Yii2?

    qonand
    @qonand
    Software Engineer
    Если Вы хотите решить задачу правильно - используйте RBAC. То что Вы пытаетесь сделать это костыли. В попытке избежать "лишних" сущностей Вы движетесь в неправильном направлении. Ваше решение:
    1. Уменьшает очевидность кода.
    2. Уменьшает в целом гибкость и масштабируемость системы.
    3. Лишает возможности встроенного кеширования данных доступа, Вы его сами планируете реализовывать?
    4. Лишает возможности проверки доступа к экшенам с помощью AccessControl, или Вы планируете в каждом экшене писать кучу if-ов для проверки доступа?
    и еще можно написать много разных пунктов. По сути дела Вы сейчас спрашиваете "как правильно забить рубанком гвоздь?" ответ - правильно никак, для этого нужно использовать молоток.
    Ответ написан
  • Какую ОС выбрать для Yii 2?

    qonand
    @qonand
    Software Engineer
    Сам Yii может работать как на Windows так и Linux, главное что бы был развернут необходимый набор ПО в системе. Вы можете в процессе учебы спокойно работать под видной и маловероятно что это вызовет какие-то проблемы. Но стоит понимать что писать учебные проекты и реальные это две разных вещи. В реальных проектах могут существовать задачи которые без линукса реализовать просто невозможно - например, реализация функционала взаимодействующего с ОС, или задачи требующие установки определенных расширений (которые на винду поставить не так то легко, а порой и невозможно). Т.е. все равно рано или поздно Вы столкнетесь с Linux, но я думаю чем раньше Вы это сделаете тем больше пользы для себя извлечете.

    Так же согласен Rou1997 и Decadal большинство серверов работает под линуксом, поэтому навыки работы с ним ОБЯЗАТЕЛЬНЫ для полноценной работы в отрасли веб-разработки

    P.S. можете еще посмотреть вот эту книгу (правда еще сам не читал), а так же документацию на гитхабе (на русском)
    Ответ написан
    1 комментарий
  • Как переделать связь model -> attributes в форме?

    qonand
    @qonand
    Software Engineer
    Хранить id в виде строки это категорически неправильно. Используйте связь many-to-many и не изобретайте велосипед
    Ответ написан
    Комментировать
  • Есть ли на yii2 какие либо аналитические дополнения?

    qonand
    @qonand
    Software Engineer
    в основном все используют GA или метрику, те кто не используют - пишут свою кастомную систему аналитики, поэтому сомневаюсь что Вы найдете нужное расширение. Как по мне если не хотите использовать GA и метрику - нужно писать самостоятельно аналитику под требования проекта
    Ответ написан
    Комментировать
  • Как лучше подключать блоки кода в Yii2?

    qonand
    @qonand
    Software Engineer
    если в представлении логики отображения не особо много - используйте вложенные представления или блоки, если же есть какая-то логика отображения - тогда виджеты
    Ответ написан
    Комментировать
  • Как изменить структуру папок yii2?

    qonand
    @qonand
    Software Engineer
    для этого Вы можете изменить пути подключения фреймворка и т.п. в файле index.php в папке web.
    например так:
    require(__DIR__ . '/../system/vendor/autoload.php');
    require(__DIR__ . '/../system/vendor/yiisoft/yii2/Yii.php');
    
    $config = require(__DIR__ . '/../system/config/web.php');
    Ответ написан
    Комментировать
  • Как можно заюзать PDO::FETCH_CLASS при чистых запросах к бд на Yii2?

    qonand
    @qonand
    Software Engineer
    используйте для этих целей DataReader
    Например:
    class User extends \yii\base\Object
    {
        public $id;
        
        public $name;
    }
    
    $query = new \yii\db\Query;
    $query->select(['id', 'name'])->from('users');
    $command = $query->createCommand(Yii::$app->db);
    $reader = $command->query();
    while ($user = $reader->readObject(User::className(), [])){
        $users[] = $user;    
    }
    Ответ написан
  • Обновление БД по таймеру(php)?

    qonand
    @qonand
    Software Engineer
    в случае с MySQL можно также использовать эвенты
    Ответ написан
    Комментировать
  • Как заменить текст в help-block формы?

    qonand
    @qonand
    Software Engineer
    public function rules(){
        return [
            [['name', 'email', 'phone'], 'string', 'max' => 255],
            [['name', 'email', 'phone'], 'required', 'message' => 'Это текст сообщения'],
        ];
    }
    Ответ написан
    Комментировать
  • Как выбрать не используемые страницы в меню?

    qonand
    @qonand
    Software Engineer
    SELECT * FROM pages WHERE id NOT IN (SELECT id_page FROM menu_pages WHERE id_menu = 1)
    Ответ написан
    1 комментарий