• Зачем нужен конструктор если функция может создать и вернуть объект?

    @PiloTeZ
    ...
    При создании через конструктор, будет просто объект с методами.
    Используая классы, можно использовать всю мощь ООП, например наследование, интерфейсы и т.п.
    https://learn.javascript.ru/class-inheritance
    https://codecraft.tv/courses/angular/es6-typescrip...
    Ответ написан
    Комментировать
  • Как сделать сервис, который будет доступен одновременно в виде сайта, desktop приложения, android и ios приложений?

    @PiloTeZ
    ...
    JS + HTML + CSS. Писал мобильные приложения на android/ios на ionic, впечатления хорошие. Для ПК версии не делал, но судя по документации, сделать можно подключив electronjs

    https://ionicframework.com/
    https://ionicframework.com/docs/deployment/desktop-app
    https://www.electronjs.org/
    Ответ написан
    Комментировать
  • Как оптимизировать задачу?

    @PiloTeZ
    ...
    Можно попробовать вынести в очередь (RabbitMQ например, обрабатывать каждого клиента отдельной задачей в очереди) и выполнять задачи несколькими воркерами, то есть параллельно. Единственное, важно что бы вас не забанил сторонний сервис и вы не положили его нагрузкой. Что бы регулировать нагрузку, нужно менять количество воркеров обрабатывающих поступающие задачи
    Ответ написан
    Комментировать
  • Почему добавляются кавычки?

    @PiloTeZ
    ...
    Это не баг. Первое значение - название колонки, поэтому не экранируется. Второе - значение, поэтому оборачивается в кавычки.

    Решение
    // Вариант 1
    ->where('a.ID = b.ID');
    // Вариант 2
    ->where(['a.ID' => new \yii\db\Expression('b.ID')]);


    https://www.yiiframework.com/doc/api/2.0/yii-db-ex...
    https://www.yiiframework.com/doc/guide/2.0/ru/db-q...
    Ответ написан
    Комментировать
  • Yii2. Как обновить много строк в БД?

    @PiloTeZ
    ...
    У вас ключ в field одинаковый, поэтому и возвращается только последнее значение.
    В качестве ключа я предполагаю должен быть $data->type или что-нибудь типа того

    <?php 
              $form = ActiveForm::begin([]);
              foreach($model as $data) {
                        $form->field($data, 'value[]')->textInput();
              }
              Html::submitButton('Сохранить', ['class' => 'btn btn-success']);
              ActiveForm::end();
    Ответ написан
    Комментировать
  • Какое приложение написать для понимания ООП?

    @PiloTeZ
    ...
    Нужно начинать с малого, не надо все и сразу. Рекомендую начать с фрейворка какого-нибудь, например Laravel. Развернуть. Посмотреть как что сделано, как работает. Попишите простенькие контроллеры. А потом, как поймете, что морально готовы, попробуйте следовать советам из другого топика https://qna.habr.com/q/1247800#answer_2286412
    Ответ написан
    2 комментария
  • Почему Laravel не запускается из коробки?

    @PiloTeZ
    ...
    Если не получится исправить. Попробуйте установить проект с нуля, заново. Следуя точно по инструкции, возможно что-то упустили.
    Или попробуйте альтернативный вариант установки
    Ответ написан
    Комментировать
  • Как улучшить контроллер, метод, архитектуру?

    @PiloTeZ
    ...
    - Начните выносить логику из экшенов контроллера в сервисы
    - Для упрощения, первое время можете делать по принципу "один контроллер - один сервис", "один экшен - один метод сервиса". Если используете QueryBuilder в GET экшенах, это можно не выносить в сервисы, первое время только геморой получите
    - Не бойтесь разбивать конроллеры на более мелкие. Если в контроллере много экшенов, или есть повторяющиеся слова в названиях экшенов, или экшены называются более, чем 2-мя словами, часто это признак, что контроллер выполняет слишком много действий. Например есть контроллер ArticlesContrller с экшенами createArticle, updateArticle, addArticleToFavorite, deleteArticleFromFavorite. Получается дичь, он будет бесконечно разрастаться и поддержка усложнится. Например если разбить на ArticlesController (create, update, delete, deactivate) и FavoriteArticlesController (add, delete), то станет ведь гораздо проще. Так же и с сервисами. Это принцип Single responsibility
    - Если метод сервиса становится слишком большим, то лучше вынести его в отдельный класс. Например есть метод Orders::create(). Создайте папку orders там же где находится сервис, в нем создайте класс OrderCreator с параметрами в конструкторе, как у метода Orders::create() и сделайте один метод create(). Заюзайте его в классе Orders::create(). Далее разбейте OrderCreator::create() на мелкие приватные методы
    - Старайтесь делать методы как можно меньше, тогда они будут более гибкими и вы сможете их использовать в других местах, так же и с классами
    - А вообще, зачем пересказывать книги. Просто прочитайте Фаулера Рефакторинг. Пробуйте разные описанные там принципы, и не стесняйтесь делать прямо так, как там написано. Это очень важная книга, которые выведет ваш код на абсолютно другой уровень

    Дополнительно
    - Рекомендую вести какой-нибудь блокнот, где брать термины и описывать своими словами. То есть постараться понять его и зафиксировать то, что поняли
    - Не занимайтесь перфекционизмом. Не бывает идеального кода. Читайте теорию, пытайтесь использовать на практике. Как можно больше практики основанной на теории
    - Начинайте с малого. Не надо применять и читать сразу все
    - Знайте меру. Если что-то узнали, не значит, что нужно теперь применять абсолютно везде, бездумно. Если считаете, что здесь это неуместно, не используйте, даже если написано иначе
    - Параллельно можно пробовать применять различные принципы: SOLID, KISS, YAGNI, DRY. Вернее не SOLID, забудьте про него вообще, первое время только голову нагружать будет, а именно Single responsibility.
    - В какой-то момент применяемые принципы могут показаться бессмысленными, тогда попробуйте что-нибудь сложнее CRUD. Например сделайте свой Pat project для практики
    Ответ написан
    1 комментарий
  • Как развернуть проект с Laravel 5.5 и PHP ниже 8.0?

    @PiloTeZ
    ...
    Посмотреть требования Laravel 5 и откатить до максимальной поддерживаемой версии PHP. Судя по вашим словам, до 8.0.
    А как установить PHP нужной версии и удалить старый, это уже вопрос для гугла
    Ответ написан
    Комментировать
  • Где можно купить готовый/незаконченный IT продукт?

    @PiloTeZ
    ...
    Ответ написан
    Комментировать
  • Кроссплатформенная разработка: какой фреймворк выбрать?

    @PiloTeZ
    ...
    Тут пишут, что в маркетах запрещены приложения на веб вью. Ничего подобного. Имел приложение с более чем 300 000 установок, все было нормально. Размещено было и в AppStore, и в PlayMarket.
    Запрещены приложения, которые выступают просто браузером для какого-то сайта.

    Если у вас есть хорошие знания jS и какого-нибудь веб фреймворка, и нет знаний натива, порекомендовал бы Ionic Framework https://ionicframework.com/ . Производительность у приложений нормальная, и кроссплатформенность практически полная. Есть нюансы, но это уже детали. Нюансы есть у любого решения.

    Для windows можно использовать Electron https://www.electronjs.org/
    Ответ написан
    Комментировать
  • Можно ли создать приложение ionic на windows для apk, а затем перенести на mac и создать ipa файл?

    @PiloTeZ
    ...
    Будет сложно, потому как не так просто сделать приложение для другой платформы, даже если это ionic. Все равно всплывают нюансы и нужен дебаг.
    Подебажить можно и просто включив режим ios в ионике, но это больше про верстку. В реальности в идеале надо запускать на настоящем устройстве, на крайняк на эмуляторе.

    Опубликовать то можете, но сперва нужно будет настроить окружение на маке и пройти 7 кругов ада. И публиковать нужно ведь от своего аккаунта, а не от аккаунта друга, поэтому вероятно придется авторизоваться на его ПК с вашего apple аккаунта.

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

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

    Наверно единственный рабочий вариант, взять мак у вашего друга на месяцок себе. Тогда да, вполне вероятно у вас получится опубликоваться
    Ответ написан
    4 комментария
  • Как заставить миграцию, в которой произошла ошибка, откатывать сделанные изменения в Yii2?

    @PiloTeZ
    ...
    Транзакциями тут не поможешь, поэтому только проверять наличие FK вручную перед его добавлением. Можно доработать базовый класс, что бы не делать это вручную.
    А вообще такое не часто встречается, просто надо хорошо тестировать миграции перед накатыванием на прод
    Ответ написан
    1 комментарий
  • Как лучше хранить много свойств в бд?

    @PiloTeZ
    ...
    Не обязательно под каждое свойство создавать поле. Можно сделать таблицу в формате ключ-значение. Например entity_styles с полями id, code, value, entity_id. И тогда можно будет хранить неограниченное количество значений.

    Что бы значение гарантированно было, можно создать модель со свойствами соответствующими стилям и заполнить ее данными из таблицы. Например EntityStyles (background, color и т.п., со значениями по умолчанию).

    Для более подходящего решения нужно больше информации о контексте. Где, зачем, примеры
    Ответ написан
  • Как построить такую же архитектуру приложения как на profi.ru?

    @PiloTeZ
    ...
    В основе архитектура простая.
    3 таблицы: категории (название), атрибуты категорий (название, тип, категория), значения атрибутов (атрибут, значение, заказ).
    - управление атрибутами через админку
    - на стороне представления при создании заказа генерируется форма на основе параметров атрибутов
    - при сохранении формы атрибуты попадают в соответствующую таблицу

    Образно говоря: это генератор форм, с привязкой к категориям.

    Для улучшения гибкости решения, можно не связывать атрибуты напрямую с категориями, и сделать это через отдельную таблицу-связь. Тогда генератор форм можно будет использовать не только для категорий, но надо ли
    Ответ написан
    Комментировать
  • Бизнес по доставке еды. Информационная составляющая. С чего начать?

    @PiloTeZ
    ...
    Чем меньше программирования в выбранном решении, тем лучше. Разработка обычно стоит невероятных денег.
    О мобильных приложениях на данном этапе можно не думать. Если бизнес пойдет, тогда и придумаете что-нибудь. Если ваш продукт будет востребован, воспользуются и веб версией.

    Функционал должен быть минимален. Публикация каталога продуктов и создание заказа. В идеале использовать online конструктор магазина.
    https://journal.tinkoff.ru/list/magaz-bez-programmista/

    Если будете привлекать разработчиков, встанет в очень большую сумму или качество будет ужасное.
    Ответ написан
    Комментировать
  • Как связать значения характеристики с товаром?

    @PiloTeZ
    ...
    Предлагаю следующую структуру
    products
    --- id
    --- name
    
    product_attributes
    --- id
    --- name
    
    product_attribute_values
    --- id
    --- attribute_id
    --- product_id
    --- value


    Дока для реализации получения данных через таблицу-связь:
    https://laravel.com/docs/9.x/eloquent-relationship...

    Я стремлюсь к тому, что получить на выходе результат в таком виде

    Эту группировку нужно делать на стороне кода, а не в БД
    Ответ написан
  • Разрешает ли Google покупки в Webview приложении через форму Google pay на сайте?

    @PiloTeZ
    ...
    Моя информация требует проверки. На сколько я знаю, google play требует совершения оплаты только через сервисы google play, так как они берут комиссию 30% с оплаты. То есть google pay не равно google play.
    Есть исключения, но для большинства действуют такие правила.

    UPD: в соседнем ответе ссылка на правила, там в принципе как раз это и описано, в деталях
    Ответ написан