Задать вопрос
  • Как очистить элемент?

    z80b
    @z80b
    Frontend
    document.querySelector('.container').innerHTML = '';
    Ответ написан
    Комментировать
  • Как лучше проверять строку на пустоту в php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Недостатки исходных вариантов проверки:
    $str = "0";  // непустая строка, содержащая цифру ноль
    if (!$str) echo "bool false\n"; // сработает
    if (empty($str)) echo "is empty\n"; // сработает
    
    $str = null; // не строка
    if ($str == "") echo "equals empty str\n"; // сработает
    if (strlen($str) === 0) echo "zero length str\n"; // сработает


    Поэтому лучший вариант, как и предложил Rsa97, проверять строгое равенство === с пустой строкой.
    Ответ написан
    Комментировать
  • Как составить запрос between в Yii2?

    @davidnum95
    $ips = Ip::find()
                    ->where(['>', 'ip_start', $userIp])
                    ->andWhere(['<', 'ip_end', $userIp])
                    ->one();
    Ответ написан
    Комментировать
  • Как вытащить id последней записи или узнать с каким id создастся юзер, Yii2?

    reaferon
    @reaferon
    $id = Yii::$app->db->getLastInsertID();
    Возвращает ID последней вставленной записи
    Ответ написан
    3 комментария
  • Как вытащить id последней записи или узнать с каким id создастся юзер, Yii2?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    Создали пользователя и получили id(самый простой вариант):
    if($model->save()){
       return $model->id;
    }
    Ответ написан
    Комментировать
  • Yii2.0 Какой максимально функциональный виджет для рендера таблиц?

    slo_nik
    @slo_nik Куратор тега Yii
    Доброе утро.
    Для таблиц в yii2 GridView, вдобавок ещё куча виджетов для вывода данных, пагинации и ajajx.
    При желании всё, что Вам надо, можно сделать используя стандартные средства yii2.
    Есть ещё разные пакеты от kartik, где стандартные виджеты yii2 расширены и доработаны, доработан и gridView.
    Ответ написан
    Комментировать
  • Как уменьшить количество таблиц-справочников с тремя-четырьмя строками?

    Для коротких списков есть тип данных: ENUM.
    Поддерживается, например, в MySQL, Postgres.

    Идеально подойдёт для:

    1. Статусы заказа (открыт/выпущен/закрыт и т. п.)
    2. Статусы сборки заказа (ожидает сборки, сборка начата, сборка проверена, сборка завершена)
    3. Формула оплаты заказа (тут много вариантов)
    4. Фонд оплаты (собственные средства, федеральный бюджет, территориальный и т. п.))
    5. Внутренний клиент (одно из возможных внутренних ООО)
    6. Ответственный сотрудник
    7. Территориальный сектор
    8. Направление

    Ответ написан
    1 комментарий
  • Как уменьшить количество таблиц-справочников с тремя-четырьмя строками?

    @rPman
    тут несколько подходов, я трогал каждый из них и все они имеют право на существования
    1. оставь как есть, я рекомендую, пусть будет 100500 таблиц справочников (если проблем с именами нет ну и отлично), fk-индексы все это свяжут а инструменты анализа базы данных помогут с этим работать (автоматические query builder с мышевозекательным интерфейсом) и база будет сама следить за тем что идентификаторы справочников не противоречивы
    недостатков я не могу придумать, кроме может быть сильно разросшейся структуры, когда то давно я слышал что некоторые базы данных при увеличении количества таблиц начинают хуже работать но как я понимаю это если их будет десятки тысяч а не десятки и сотни.. может быть резервное копирование такой базы или ее репликация будет проходить чуть медленнее или еще хуже, организационно репликация может быть настроена на не рассылку ddl модификаций, в этом случае создание нового справочника будет задавать работу еще и админам, что нежелательно.

    2. противоположный, использование одной таблицы key-value для нескольких разнородных справочников (id, value, table_name), в 99% случаев можно использовать один сиквенс (одну последовательность идентификаторов), вам же не обязательно чтобы разные справочники начинали счет своих строк с одного и того же числа 1.
    Недостаток - база данных теперь не сможет контролировать что вы используете непротиворечивый идентификатор (можно в запись одного справочника указать номер из другого), хотя несуществующий так же нельзя будет указать (и будут работать delete cascade), так же удобной автогенерации sql не будет. Структура будет проще, так же интерфейс редактирования таких справочников может быть один вместо кучи форм и добавлять новые справочники будет сильно проще (хотя с точки зрения разработки нет особой разницы, один insert ты написал или create table перед этим)

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

    Лично я третьим подходом в чистом виде не пользовался, но у меня был набор скриптов, которые из справочников в базе данных формировали код с инициализацией констант и их именами для приложения (сами справочники приложением редактироваться не могли) и был соблазн перевести эту часть базы из 'оперативной' в 'для разработчика', так как справочник это что то - отвечающее за отображение информации, но не за бизнеспроцессы (ну примерно как языковые файлы для приложения, не хранить же переводы строк интерфейса тоже в базе, ну так и справочники смогут работать как часть этого интерйфейса и тоже может требовать перевода).
    Ответ написан
    4 комментария
  • Для чего разрабатывать пользовательскую документацию со стороны разработчика?

    1. Это дополнительный источник истины - того, как должна работать программа.
    А значит и меньше споров о том что является багом, а что фичёй, и почему что-то было сделано так, а не иначе.

    2. Это упростит онбординг новых членов команды - вместо того чтобы тратить кучу времени на устный рассказ о продукте - можно просто показать инструкцию.
    Ответ написан
    Комментировать
  • Как правильно чистить логи в journald (systemd)

    lmrvsk
    @lmrvsk
    IT/Web
    Для очистки логов по условиям: до даты или обрезать до такого-то размера (в кол-ве записей или в Мб) можно использовать встроенные команды:
    journalctl --vacuum-size=128M
    journalctl --vacuum-time=1d
    Ответ написан
    1 комментарий
  • Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?

    Сортировка настраивается посредством свойства sort дата провайдера
    $dataProvider = new ActiveDataProvider([
         'query' => $query,
         'sort'=> [
         'attributes' => [
                'age',
                'name' => [
                    'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                    'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                    'default' => SORT_DESC,
                    'label' => 'Name',
                ],
            ],
     ]);

    Заполните массив attributes параметрами по которым вам необходимо сортировать, и далее передавайте данные параметры через get строку запроса в виде ...?sort=-name
    Ответ написан
    22 комментария
  • Практическое использование схем в Postgresql - когда они нужны?

    В целом, понимайте схемы как пространства имен. Схемы помогают логически организовать структуру БД. Различные приложения или компоненты приложений внутри себя имеют более высокую связность, чем между собой, тоже самое и с данными в БД - часто таблицы сами по себе организуются в логические группы, причем внутри группы связей довольно много (внешние ключи, какие-то общие хранимые процедуры и т.д.), а между этими группами - мало или нет вовсе.

    Важно понимать, что различные БД плохо подходят для логического группирования, т.к. разбиение по базам данных нужно скорее для администраторов, а не для приложений. Плюс, в большинстве СУБД, где существует понятие схемы, возможно ставить внешние ключи на таблицы в другой схеме, но нельзя на таблицы в другой БД. Иными словами, отдельные БД удобно создавать тогда, когда вы разделяете данные абсолютно не связанных приложений или сервисов. Например, складского учета и форума поддержки пользователей. С другой стороны, если вы хотите логически разделить таблицы в соответствии с компонентами одного приложения (например, корпоративный портал: 4 таблицы для поддержки авторизации, 10 таблиц для поддержки форума, еще 5 для чата со службой поддержки или отделом продаж) - то именно схемы будут удобным механизмом для этого.

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

    А что будет если несколько юзеров будут на одну public-схему коннектиться?

    Помимо того, что схема - это пространство имен, в большинстве СУБД это еще и пространство безопасности. Даже в рамках одного многокомпонентного приложения имеет смысл ставить границы безопасности для ограничения возможных потерь и разрушений в случае компрометации одного из компонент.

    Вот допустим, у вас есть отдельная схема для таблицы авторизации и аутентификации и отдельная - для корпоративного форума. Сервис авторизации у вас выполнен отдельно от форума (например, авторизация выдаёт токены пользователю, с которыми он потом может зайти на форум). С точки зрения безопаности было бы логичным выдать сервису авторизации и форума различных пользователей в базе - тогда, при взломе форума невозможно будет получить доступ к паролям в базе или изменить права на портале, подправив данные в таблице ролей. Конечно, многие СУБД разрешают ставить права на отдельные таблицы, однако схема в данном случае играет роль контейнера и позволяет проставить единые правила для всех таблиц внутри неё.

    то есть при работе в постгре предпочтительнее вместо отдельных баз делать разные схемы в одной

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

    Вот вам еще хороший пример. У вас есть приложение для ведения бухгалтерии и складского учёта на фирме. При этом сложилось так, что вам нужно хранить на одном сервере данные нескольких разных фирм (например, вы предоставляете готовый сервис под ключ нескольким клиентам). В этой ситуации более чем логично хранить данные разных клиентов в разных БД, а данные бухгалтерского и складского учета - в различных схемах в рамках одной БД конкретного клиента.
    Ответ написан
    2 комментария
  • Можно ли отдать небольшой промышленный проект PHP на оценку правильности архитектуры?

    @rPman
    Все зависит от целей - для себя (если ты разработчик или занимаешься внедрением кем то написанного) и своего успокоения или для отчетности и сертификации.

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

    Если второе - то все будет зависеть от требований этой отчетности, и там способ проведения аудита будет определяться наличием и доступностью компаний под эти требования.
    Ответ написан
    1 комментарий
  • Как веб-приложению работать на wi-fi-устройстве, когда сеть иногда исчезает?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для хранения данных в браузере рекомендую использовать не localSrorage, а специальную обертку localforage:
    https://html5.by/blog/localforage/
    И тогда не придется загонять себя в 4 мегабайта, сможете записывать данных столько, сколько нужно.

    По сайту же, вам по факту надо написать PWA приложение - это такой специальный веб-сайт, который может работать офлайн, без интернета. Подробнее здесь:
    https://yandex.ru/search/?text=%D1%81%D0%BE%D0%B7%...
    Ответ написан
    1 комментарий
  • Как веб-приложению работать на wi-fi-устройстве, когда сеть иногда исчезает?

    azovl
    @azovl
    Вам нужно копать в сторону сервис воркеров и работы оффлайн с ними.
    Ответ написан
    1 комментарий
  • Какой подход использовать для валидации данных?

    Валидация, масштабируемость и юзабилити, это как бы совсем разное.

    Для юзабилити - валидация на фронте. Введя что-то невалидное пользователь должен видеть проблему сразу, а не когда закончит заполнение формы, и отправит всё на бэк.

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

    Для гибкости - контроллер валидирует только соответствие структуры запроса (ругается что не хватает значений, или ожидали данные в одном формате, а пришли в другом). Сами данные в процессе обработки оборачивать в самовалидируемые ValueObjectы, которые при создании будут уже проверять данные на соответствие более специфичным требованиям.

    На каком бы этапе не шла валидация - при ошибках она не должна ничего передавать в ответ, а должна просто бросать исключение с текстом ошибки. Для того чтобы эти исключения преобразовать во внятный ответ - делается общий их обработчик, который будет приводить их к интерфейсу API.

    И т.д. и т.п.
    Ответ написан
    5 комментариев