Ответы пользователя по тегу Yii
  • 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;    
    }
    Ответ написан
  • Как заменить текст в help-block формы?

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

    qonand
    @qonand
    Software Engineer
    В встроенном в Yii механизме перевода - если язык приложения совпадает с языком установленным по умолчанию - перевод не осуществляется. Такое поведение определено по умолчанию (поэтому Ваш код и не работает) для того что бы когда пользователь попадал на версию сайта с дефолтным языком, Ваше приложение не выполняло лишней работы по чтению файлов переводов. Вы можете отключить это поведение, включив принудительный перевод, сделав это например так:
    return [
      // ...
      'sourceLanguage' => 'en-EN',
      'language' => 'en-EN',
      'i18n' => [
        'translations' => [
                'welcome' => [
                    'class'   => 'yii\i18n\PhpMessageSource',
                    'forceTranslation' => true,
                    'fileMap' => [
                        'welcome' => 'welcome.php'
                    ],
                ],
            ],
      ]
      // ...
    ];


    Но в этом случае стоит понимать что при каждом обращении к сайту на дефолтном языке Yii будет лопатить файлы переводов....
    Ответ написан
    6 комментариев
  • Как в элемент формы Yii2 добавить свой тег?

    qonand
    @qonand
    Software Engineer
    Если я правильно понял, Вам необходимо настроить шаблон отображения чекбоксов внутри checkboxList. К сожалению в yii не предусмотрена возможность настройки одного шаблона для всех чекбосов в checkboxList, но вид каждого чекбокса можно генерировать самостоятельно. Собственно для решения Вашей задачи этим можно и воспользоваться, например так:
    $inp->checkboxList($inputParams['label_values'], [
        'encode' => false,
        'item' => function ($index, $label, $name, $checked, $value){            
            $id = "ch{$index}";
            return Html::beginTag('div',['class' =>'checkbox']) . Html::label($label,$id) . Html::checkbox($name,$checked,['id'=>$id]) . Html::endTag('div');             
        } 
    ]);
    Ответ написан
    Комментировать
  • Можно ли добавить комментарий к столбцу в БД при миграции?

    qonand
    @qonand
    Software Engineer
    Такая возможность есть, например при создании таблицы можно задать комментарий так:
    $this->createTable('mytable', [
        'id' => $this->primaryKey()
              ->comment('Уникальный идентификатор записи'),
    ]);


    Если же таблица существует можно сделать так:
    $this->addCommentOnColumn('mytable', 'id', 'Уникальный идентификатор записи');
    Ответ написан
  • Можно ли задать правило валидации unique на 2 поля?

    qonand
    @qonand
    Software Engineer
    [
        [
            'id_словаря', 
            'key'
        ], 
        'unique', 
        'targetAttribute' => [
            'id_словаря', 
            'key'
        ]
    ],
    Ответ написан
    1 комментарий
  • Как использовать связи в ArrayDataProvider?

    qonand
    @qonand
    Software Engineer
    ArrayDataProvider работает с массивом, который Вы ему передаете. Массив может в себе содержать только данные, связи он содержать не может. Максимум что Вы можете сделать это загрузить данные с базы с связями в массив и скормить его ArrayDataProvider
    Ответ написан
    Комментировать