Задать вопрос
  • Какой таймтрекер юзать для trello?

    MegaMufa
    @MegaMufa
    https://toggl.com/
    И расширение в браузере ставишь для него Toggl Button: Productivity & Time Tracker (в настройках надо будет дать доступ к сайту сайту трелло).

    Теперь в карточке появится кнопка для начала отсчета времени.

    Мне бесплатного тарифа хватате. Трекалка, отчеты. Я в конце месяца делаю отчет, экспортирую в пдф и начальнику отправляю. Удобно.

    Пользуюь уже больше 5 лет, всем доволен.
    Ответ написан
    Комментировать
  • Ссылки в PHP (&$var1), переменные переменых ($$var2) и их практическое применение?

    MegaMufa
    @MegaMufa
    По ссылке передаются в метод данные, которые должны быть изменены внутри метода. Иногда это избавляет от лишнего кода. Плюс расход памяти в некоторых случаях ниже.

    По поводу переменных переменных. Используются при написании обобщенного кода. Вот пример. Это поведение Yii2 для хранения деревьев в БД. Поведение - это фича фреймворка - что-то вроде трейта или миксина.

    В общем его можно подсключить к модели и она сама будет заполнять служебные поля при перемещении узлов. Для гибкости, при подключении можно указать поле таблицы, по которому надо сортировать данные. MaterializedPathBehavior::$positionAttribute. Это поле используется в коде для построения запросов:
    $position = $this->node->{$this->positionAttribute}


    Таким образом достигается гибкость. Тому, кто будет использовать это поведение не придется подгонять схему своей БД под него. Он сможет указать поля, с которыми надо работать.

    Но конечно этим надо пользоваться с осторожностью и только там, где вы точно уверенны, что это необходимо. Иначе можно наворотить неподдерживаемую кашу.

    UPD.

    Еще немного о переменных переменных. Вообще вместо них можно добавить абстрактных методов вроде getPositionAttribute() и заставить пользователя переопределить их. Это будет более правильно идеалогически. Но, используя переменные, появляется возможность настройки без написания лишних классов.
    Ответ написан
    Комментировать
  • Где взять много данных для обработки?

    MegaMufa
    @MegaMufa
    https://www.brentozar.com/archive/2015/10/how-to-d...
    Торрент файл с дампом базы данных stackoverfow - 70Gb, думаю будет достаточно.
    Ответ написан
    Комментировать
  • Как вызвать контроллер в контроллере Yii2&?

    MegaMufa
    @MegaMufa
    Вам нужен метод runAction()

    Пишите: \Yii::$app->runAction("controllerId/actionId") Или людой нужный вам route используете.
    Ответ написан
    Комментировать
  • Есть ли смысл в нативных связях в БД, если relation в active record их дублируют?

    MegaMufa
    @MegaMufa
    Если вы не проставите внешние ключи, то данные можно будет менять только через ваше приложение. Если вдруг вам понадобится что-то поменять в обход описанных алгоритмов, то вы рискуете потерять целостность данных. А такие ситуации бывают довольно часто.

    Если же вы выставите ключи, то бд сама будет следить за целостностью. Она не даст вам записать неконсистентные данные и при удалении каскадно удалит все "осиротевшие" записи (если ключ этого требует).

    Плюс каскадное удаление бд сделает быстрее, чем ваш код. Вы например удаляете пользователя и надо удалить все его записи. Вам для этого сначала придется выбрать все его записи. Удалить их. А уже потом удалить пользщователя. А в внешними ключами вы просто удаляете пользователя, а бд сама подчистит все зависимые записи.
    Ответ написан
    5 комментариев
  • Почему не доступно поле из модели?

    MegaMufa
    @MegaMufa
    load() работает только с теми полями, которые вы указали для текущего сценария. Если вы не указали сценарий явно, то используются только те поля, для которых указаны правила валидации. Вот почитать про сценарии: www.yiiframework.com/doc-2.0/guide-structure-model...
    Ответ написан
  • Какое название папки выбрать для стилей/скриптов?

    MegaMufa
    @MegaMufa
    Стайлгайды в подавляющем большинстве случаев определяются не языком, а фреймворком/библиотекой на которых вы пишите. Есть, конечно, самые распространенные соглашения об именовании в язке, но обычно соглашения, принятые в экосистеме вашей основы, либо совпадают либо имеют приоритет.

    Вы бы хоть указали, о каком языке/фреймворке идет речь. Если говорить о компилируемых эссет файлах, то директория должна (но не обязана) называться соответсвенно assets, а внутри биться по версиям (хешам). Но если говорить об обычных публичных файлах, то, как я уже сказал, смотрите в своем ферймворке. Чаще всего это public. А там, как вам захочется. Главное: чтобы понятно было.
    Ответ написан
    5 комментариев
  • Yii2, activerecord минусы asArray()?

    MegaMufa
    @MegaMufa
    Использовать asArray() означает похерить псе плюшки ООП. Не забывайте, что кроме полей в моднлях еще и логика. У вас даже автокомплит не будер таботать.
    Ответ написан
    4 комментария
  • Как обратиться к функции класса, если есть только его key?

    MegaMufa
    @MegaMufa
    Вы все правильно думаете. Только надо использовать не квадратные, а фигурные скобки.
    $a->{$func}();
    Вообще, можно и без скобочек, но с ними наглядней получается.
    $a->$func();
    И еще, у вас перед a пропущен знак $
    Ответ написан
    1 комментарий
  • Что такое абстракция для http, Request и Response в mvc framework?

    MegaMufa
    @MegaMufa
    Честно говоря первый раз слышу про этот фреймворк. Да и фреймворком это назвать сложно. Посмотрел немного исходники (это они?). Сделано, мягко говоря, через одно место. Да и ничего там практически нет. Если хотите разобраться с MVC, посковыряйте тот же Yii например.

    Касательно конкретно вашего вопроса. Response и Request используют для того, чтобы абстрагироваться от работы с потоком ввода-вывода. Response например за вас выставит необходимые заголовки. Request даст удобную обертку для доступа к $_POST и $_GET запросам. Это естестенно не все.

    Суть в том, чтобы вам не пришлось работать с низкоуровневыми штуками напрямую. Вы получаете к ним доступ через абстракцию, которая так же предоставляет кучу разных удобных плюшек. Плюс вы работаете не с глобальными данными, а с конкретным объектом, который получили в метод.

    Почему рендерит через echo - хз. В yii это например так происходит:
    public function renderPhpFile($_file_, $_params_ = [])
    {
        ob_start();
        ob_implicit_flush(false);
        extract($_params_, EXTR_OVERWRITE);
        require($_file_);
        return ob_get_clean();
    }
    Ответ написан
    4 комментария
  • ООП PHP не работает класс?

    MegaMufa
    @MegaMufa
    1. Включите вывод всех ошибок и тогда интерпретатор сам вам будет говорить, почему не работает.

    2. Вы объявляете свойства устаревшим способом. Очень-очень устаревшем (еще в 4 версии атк делали). Надо так:
    public $firstname;
    public $lastname;


    3. В конструкторе у вас неправильно обращение к переменным. Уберите второй знак доллара:
    public function __construct($firstname, $lastname) {
        $this->firstname = $firstname;
        $this->lastname = $lastname;
      }


    Должно получиться вот так:
    <?php
    class Info {
        public $firstname;
        public $lastname;
    
        public function __construct($firstname, $lastname) {
            $this->firstname = $firstname;
            $this->lastname = $lastname;
        }
    
        public function GetInfo() {
            $n = $this->firstname.' '.$this->lastname;
            return $n;
        }
    }
    
    $a = new Info('Ivan', 'Pupkin');
    echo $a->GetInfo();


    И вам надо сменить учебник, по которому вы это делаете. Он очень устарел и больше вреден, чем полезен.
    Ответ написан
    Комментировать
  • Чем должны отличаться stage и prod среды?

    MegaMufa
    @MegaMufa
    Ни в коем случае тесты нельзя запускать на реальных данных! Если что-то пойдет не так, вы испортите рабочие данные.

    Лучше скопируте рабочую базу (если это позволяет размер), замените всякие адреса и телефоны на фейковые, чтобы в случае чего пользователю ничего не отправиось. И используйте ее для тестов.

    Если в обще, то стейдж отличается от продакшена:
    - включеным дебаг режимом и профилировщиком
    - уровнем логирования
    - каще всего еще и кеш отключен
    - не минифицируются asset файлы для упрощения дебага
    - другая база данных

    Не знаю, как все, но в нашей команде стейджи с продакшеном находяться на разных машинах. Тесты создают довольно большую нагрузку, которая совершенно не нужна продакшену.

    Так же мы на стейдже используем SSD вместо HDD. Для обычной работы приложения обычного диска хватает, а вот на стейдже билды собираються в несколько раз быстрее благодаря ssd.
    Ответ написан
    1 комментарий
  • Давать или не давать доступ клиенту в git?

    MegaMufa
    @MegaMufa
    Даю readonly доступ к репе только в том случает, если клиент проверенный или в случае полной предоплаты. В других случаях не даю в виду описаных вами причин.

    Если вы работаете поэтапно с отдельной оплатой каждого этапа, то можно сделать так: завести отдельную ветку и дать доступ к ней. И сливать в нее новый код, после оплаты. Получается, клиент отлатил, скажем, личный кабинет - слили его в эту ветку. И так для каждой итерации.

    Полный доступ, я бы поостерегся давать.
    Ответ написан
    Комментировать
  • Зачем нужны события в yii2?

    MegaMufa
    @MegaMufa
    Событийная модель помогает строить слабосвязанную систему. Пример из жизни. Я сейчас работаю над SAAS платформой. Компания покупает учетку и выбирает за какие модули платить. Есть модули учета, проверок, для кадровиков и т.д. Модули должны взаимодействовать между собой, но любого модуля может не быть.

    Например при создании сотрудника в модуле "кадррезерв", его автоматически надо добавить в модуль "учета". Я не могу напрямую дергать метод из другого модуля т.к. заранее не известно, будет он куплен или нет.

    Вместо этого я бросаю событие типа user.created, а в модуле учета в обработчике этого события заношу пользователя в нужные списки. Получается, если модуля нет, то событие просто выброситься в холостую, а если есть, то запустится обработчик.

    Это на самом деле очень удобно. Но есть и негативная сторона: из-за слабой связаности усложняется навигация по коду. Что бы узнать, где есть обработчики приходится пользоваться поиском по имени события. Но это малая цена за гибкость, которую дают события.
    Ответ написан
    9 комментариев
  • Где остальные relation в yii2?

    MegaMufa
    @MegaMufa
    В Yii2 их нет. Вмето belongsTo() используется hasOne(), а вместо manyToMany() - hasMany() вместе с viaTable()
    www.yiiframework.com/doc-2.0/guide-db-active-recor...
    Ответ написан
    3 комментария
  • Как оптимизировать сервер под 1000 запросов каждую минуту?

    MegaMufa
    @MegaMufa
    Запуск скрипта относительно трудоемкая штука. Попробуйте передавать в скрипты id-шники не по одному, а пачками, а в скрипте обрабатывать их в цикле.

    Но тут надо смотреть по логике, что именно делает скрипт и как можно оптимизировать его логику работы. Например кешировать рещультаты выборки из бд. Записывать результаты один раз в конце запроса, а не по одному (если это возможно). Какая версия PHP стоит, включен ли кеш байт кода?
    Ответ написан
    5 комментариев
  • Как оптимизировать работу сайта на yii?

    MegaMufa
    @MegaMufa
    На оф сайте статья есть, гуглить элементарно:
    www.yiiframework.com/doc/guide/1.1/ru/topics.perfo...
    Ответ написан
    Комментировать
  • Yii2 как сделать связь один к одному?

    MegaMufa
    @MegaMufa
    В таблице пользователя прописываете связь:
    public function getProfile() {
      return $this->hasOne(Profile::class,['id'=>'id']);
    }


    И профиль становится доступным через свойство.
    $user = User::find()->andWhere(['username'=>$login])->one();
    $user->name; // своятво пользователя
    $user->profile->id // свойство профиля


    Если хотите одним запросом, то при выборке укажите модель, которую тянуть
    $user = User::find()->with('profile')->andWhere(['username'=>$login])->one();
    Ответ написан
    Комментировать
  • Покритикуйте верстку, какие в ней есть ошибки?

    MegaMufa
    @MegaMufa
    Здорово у вас получилось.
    Вот тут заметил, что текст наезжает на стрелочки: take.ms/W0T40
    Ответ написан
    1 комментарий
  • Скорость получения данных через ORM, как быстрее?

    MegaMufa
    @MegaMufa
    Вообще надо использовать все варианты.
    Те запросы, чьи результаты не требуют реалтайм проверки можно кешировать. Для сложных ситуаций можно и руками написать. Еще рекомендую поискать, как в вашей ORM делается жадная выборка. Такая фича позволяет большинство (не все, но очень многие) запросов не дергать по одному, а объединить в один большой.

    Тут нет серебряной пули. Берете профилировщик, находите самые медленные места и думаете, какой из этих подходов подходит тут чуше всего. Реализуете его. И так дальше по списку.
    Ответ написан
    Комментировать