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

    mitaichik
    @mitaichik
    Можно написать свой класс логгера (LogTarget вроде), поставить категорию чтоб логгировал sql запросы, руками отфильтровывать необходимые запросы (например по вхождению instert/update), и логгировать в нужном вам формате, поставить чтоб сбрасывал лог немедленно.

    Но вы уверенны что логгирование - лучший вариант? Может все-таки можно решить вашу проблему на уровне БД? Что за разная конфигурация такая что мешает использовать вам репликацию или бинлоги?
    Ответ написан
  • Yii2: как внедрить зависимости в экшн?

    mitaichik
    @mitaichik Автор вопроса
    В общем, это было, но выпилили yiiframework.ru/forum/viewtopic.php?t=40111
    Ответ написан
    Комментировать
  • В Yii 1, active record не находит таблицу в базе, а она там есть! Помечу?

    mitaichik
    @mitaichik
    1. Посмотрите не переписан ли в модели метод который получает инстанс коннекшена к бд (что-то типа getDb, не помню уже)

    2. Yii может кешировать схему (зависит от ваших конфигов) - если таблиц новая и кеш включен - нужно очистить кеш.
    Ответ написан
  • Как организовать перевод контента d yii?

    mitaichik
    @mitaichik
    Там же в документации все написанно: yiiframework.ru/doc/guide/ru/topics.i18n

    С контентом сложнее, ибо из коробки решений нет, но, уверен, есть куча экстеншенов, да и самому написать не проблема. Разве что админку придется переработать для поддержки мультиязычности.
    Ответ написан
  • Как изменить значение колонки CRUD?

    mitaichik
    @mitaichik
    В конфигурации столбцов GridView заменяете user_id на user.username (это конечно если прописаны релейшены правильно)
    Ответ написан
    1 комментарий
  • Почему появляются повторяющиеся сообщения об ошибке при валидации модели в Yii?

    mitaichik
    @mitaichik
    Не должно. Может у вас несколько required валидаторов на одно поле навешанно? Скиньте код метода rules
    Ответ написан
    Комментировать
  • Получение значения из БД yii2?

    mitaichik
    @mitaichik
    Для этого есть метод scalar, то есть будет так:
    UserSubscription::find()->select(['id'])->where(['user' => 16])->scalar()
    Ответ написан
    Комментировать
  • Как в yii2 сформировать ссылку с гет параметрами?

    mitaichik
    @mitaichik
    В yii есть такое понятие "route" - маршрут. (https://github.com/yiisoft/yii2/blob/master/docs/g... ) Он содержит ссылку на контроллер\экшн + параметры. Записывается в ввиде массива ['/controller/action', 'param1' => 'val1', 'param2' => 'val2'].

    Большинстов методов (тот же Html::a) могут принимть в качестве урла этот маршрут, а Yii уже сам сгенерирует нормальнйы урл в соответствии с правилами. По умолчанию он пихает параметры в query часть урла, то есть получиться урл типа

    http:/bla.com/controller/action?param1=val1&param2=val2

    Но можно настроить по всякому, например, http:/bla.com/controller/action/val1/val2 При этом код с маршрутами переписывать не придется.

    В общем, в yii все продуманно и сделано круто. Лично мы всегда указывем url как маршруты - это реально очень удобно.
    Ответ написан
    5 комментариев
  • Как в Yii2 вставлять базовые данные в базу?

    mitaichik
    @mitaichik
    Создаешь дамп базы изначальной. Ложишь в файл куда-нить, делаешь миграцию которая выполняет этот файл.
    Ответ написан
  • Yii2 и ORM: как правильно делать большие выборки из базы данных?

    mitaichik
    @mitaichik
    Думаю Yii здесь не причем. Точнее его ORM. Все эти ее преобразования\создания объектов которая делает его ORM (точнее - ActiveRecord) - это все мелочи, у вас тормозит что-то другое.

    Тут надо:

    1. Профилировать сам запрос. Возможно у вас сама выборка тормозит, индексов не хватает, или еще чего.

    2. Поиграть с with: посмотреть что лучше работает: with/joinWith(он вообще подгрузит все одним запросом), или вообще без with (то есть отложенная загрузка - в некоторых кейсах лучше так).

    3. Обратить внимание что происходит после выборки - возможно, тормозит пост-обработка.

    4. Посмотреть на сами модели: если у вас там на каждую модель навешивается куча бихейверов - тоже возможно тупить (правда у нас это начинало тупить когда выбирали десятки тысяч моделей)
    Ответ написан
    Комментировать
  • Почему composer не подтягивает зависимости зависимостей?

    mitaichik
    @mitaichik
    А вы подключаете его как пакет? Или просто как сторонний репозиторий? Я не уверен, но, возможно, если вы полдключаете как просто сторонний репозиторий, возможно он не обрабатывает composer.json?

    А так да - должен.
    Ответ написан
    Комментировать
  • Как начать работать со своим репозиторием github для yii2?

    mitaichik
    @mitaichik
    Тут есть несколько подходов, все зависит от потребностей. Я не буду описывать простые решения, типа тупо require из общей папки, или дописать автолоадер, и т.п.

    Главное - в папке vendor мы ничего руками не меняем и ничего там не создаем - ей управляет композер и лездь туда не надо.

    Первый варик - для общего кода создаем git-репозиторий (неважно где, хот у себя на компе, хоть на том же github/bitbucket) и тупо подключаем репозиторий. Но это нищебродский вариант.

    Второй (если код не приватный) - делаем как все - создаем репозиторий на гитхабе и регим пакет в пакагисте - самый стандартный путь. Отсюда все вытикающие плюсы, например, менеджмент версйи.

    Третий - то же самое, но для приватного кода: настраиваем свой композер-сервер (например satis) - получаем тоже самое что composer + github, только приватный вариант.

    Следует отметить, что когда вы будете делить на пакеты, то ваш код будет разрабатываться в отрыве от проектов где он используется. То есть не так что вы в своей библиотеке что-то написали, обновили страницу основного проекта - и все применилось - нет. Вы должны будете закомитить, затегировать, запушить, в основном проекте обновить зависимости, и т.д. Поэтому советую писать общий код в абсолютном отрыве от того где он будет юзаться (как фреймворк - его разработчики ж не знают где он будет юзаться). Чтоб проверять изменения советую (если еще не в юзаете) освоить автоматическое тестирование. Нужно будет гораздо лучше продумывать интерфейс вашей либы. Но в целом - это все позитивное движение. Так что вперед и удачи )
    Ответ написан
    1 комментарий
  • Как эффективнее всего изучать yii2?

    mitaichik
    @mitaichik
    Подумайте какой проект вы хотели бы сделать, и сделайте его на yii. Я так делал когда Java изучал. Теперь мне этот учебный проект еще и бабла приносит )
    Ответ написан
    4 комментария
  • Почему две параллельные транзакции не блокируют друг друга?

    mitaichik
    @mitaichik
    У вас все работает правильно и ожидаемо, и транзакции здесь вообще не при чем: фактическое изменение значения в БД у вас происходит спустя 10 секунд (save + commit). Запуская 2 процесса, они оба одновременно считают 0, изменят его на 1, и оба через 10 секунд сохранят эту единицу в БД - естественно, там будет 1.

    Вы можете сохранять (save) изменения сразу после изменения на 1, но проблему это не решит, так как фактически другой транзакции изменения буду доступны только после коммита (Советую почитать про уровни изоляции транзакций https://habrahabr.ru/post/135217/ чтоб понять почему так происходит)

    БД с контролем версий могла бы помочь - при попытке перезаписать устаревшие данные такая БД вернула бы ошибку. Но MySQL - не такая БД (впрочем, это можно сделать самому).

    То что тебе надо - это чтоб обновление шло последовательно, не параллельно. Это очередь. Можешь сделать ее подобие сам, можешь юзать кучу готовых инструментов, можешь юзать мьютексы (хотя, имхо, в контексте php это сомнительный совет).

    Если речь идет чисто о счетчиках - я бы порекомендовал тебе Redis с его incr (он однопоточный и подобных проблем там нет в принципе).

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

    mitaichik
    @mitaichik
    Если мы про высокие нагрузги: Мемкеш теряет данные при перезапуске. Тут либо хранить в мемкеше и приперезапуске системы\мемкеша заполнять их снова, либо хранить в redis (Я бы сделал так).

    А вообще - где угодно можно, можно хоть в той же теблице юзера в MySQL - главное чтоб производительности хватало.
    Ответ написан
    Комментировать
  • Как в yii2 сделать для формы с переменным количестовм checkBox и валидацию?

    mitaichik
    @mitaichik
    Мало информации. Что вы хотите провалидировать?

    На вскидку: что есть хоть одна категория - required, что все значения integer - each, что есть такие категории - in или exist, b и т.п. Можно написать кастомный валидатор (метод\анонимная функция\класс).

    Я бы выбрал кастомный валидатор, так как многое нужно проверять, и один метод который все это делает будет выразительнее чем несколько валидаторов.

    Что касается виджет - Angular :) Возможно можно сделать что то типа
    for($i =0; $i< 10; $i++){
        $form->field($model, 'checkboxList[]')->checkboxList($items); ?>
    }


    Но это догадки, надо проверять.
    Ответ написан
    Комментировать
  • Как настроить глобальны конфиг для CGridView?

    mitaichik
    @mitaichik
    Если вы про Yii2 - то там это настраевается через DI контейнер:

    https://github.com/yiisoft/yii2/blob/master/docs/g...

    widgetFactory - это в 1ом yii было, как там правильно - я уже не помню.
    Ответ написан
  • Как подружить gii и php storm?

    mitaichik
    @mitaichik
    Попробовал - у меня такой проблемы не возникает, но:

    Некоторые проги суют в буфер не просто текст, а текст с разметкой, поэтому при вставке куда-либо (в том числе и в phpStorm) может получиться фигня + phpStorm может как-то реформатнуть вставляемый текст.

    Для избежания этого в конектсом меню phpStorm есть пункт Paste Simple - он вставляет просто текст без размтки и без форматирования.
    Ответ написан
  • Куда складывать классы в Yii2?

    mitaichik
    @mitaichik
    Этот вопрос возывает холивары даже у профессионалов...
    Ответ написан
  • Правильно ли так формировать ошибки для json запроса?

    mitaichik
    @mitaichik
    Возвращать HTTP статус - (именно это делает setStatusCode) - да, надо, это правильно, и со стороны js писать код удобнее будет. Ваши сомнения, скорее всего, из-за того, что мало кто так делает - но это чисто из-за неопытности тех кто так не делает.

    Еще, если у вас json, совету почитать все про rest из документации yii (https://github.com/yiisoft/yii2/tree/master/docs/g... - там много интересного написано, в фреймворке уже кое-чего подготовленно для этого.
    Ответ написан