• Как подгрузить нужный класс если библиотека с этим классом подгружается несколько раз?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Попробуй синоним, например
    use GuzzleHttp\Client as VendorClient;
    
    public function __construct( )
      {
                    $client = new VendorClient();
                    $res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
                    echo $res->getStatusCode();
      }
    }
    Ответ написан
    Комментировать
  • Go или PHP как язык влияет на развертывание приложения?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Обойти указанные вами проблемы с PHP можно, если распространять его в докере. Тогда все зависимости, связки и фоновые процессы будут инкапсулированы, а запуск при верном Dockerfile сведется к одной команде.
    Ответ написан
    Комментировать
  • Чего не хватает моим функциям?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Если вы пишете такие продукты, что уперлись в производительности в PHP - мое почтение. (хотя что-то мне не верится). Особенно с такими примерами кода.

    Как правило логичным шагом при получении таких ограничений - переписывание узких мест на более производительных языках, как например поступают в Badoo. на C/go. А основная кодовая база ТАК выглядеть не должна ни при каких условиях.
    Используется функциональный подход - так где функции высшего порядка? где отсутствие глобальных состояний? Ваш начальник не умеет ни функциональный подход готовить, ни объектно-ориентированный.
    По факту - вашего начальника я бы не взял даже на должность джуниора - 15 лет писать вот такое, принципиально считать что твои велосипеды лучше всех сложившихся практик, и быть намертво уверенным в собственной правоте - это смерть для разработчика и для коллектива, в котором он работает, а если уж он еще и начальник в нем... Из-за таких как он и ходит в сообществе мнение о PHP как о плохом языке для обезьян.

    Пока молодой и не научился такому же подходу - меняй работу, иначе потеряешь кучу времени и на этой работе, и на переучивание в дальнейшем.

    Ну это как и у других - оффтоп с критикой твоего начальства.

    Что касается именно кода - обрати внимание на PSR соглашения - по форматированию кода, именованию переменных, сделаешь код более читаемым (www.php-fig.org/psr/) , это стандарт в индустрии и на скорость никак не повлияет, можешь даже начальнику показать.
    Дальше познакомься с PDO и понятиям SQL инъекций. Код приведенный в вопросе абсолютно небезопасен, и то, что параметр $settings задается разработчиком - не аргумент. Новый джун может запросто туда отправить просто $_POST при сабмите формы - и вы никак от этого не защититесь. Код должен быть защищенным изначально, а не дырявым и "но вы эти дыры не используйте".
    Листинги кода такой длины - нечитаемые, бейте на логические куски, книга Мартина Фаулера "Рефакторинг" в помощь, чтобы понять, как оптимально и правильно это сделать.
    Ответ написан
    5 комментариев
  • Как игнорировать composer некоторые папки?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Средствами composer такого механизма реализовать не удастся, насколько я знаю - он тупо качает исходник указанный в packagist.org . Вариант - иметь форк основного проекта без папки тестов, который и сабмитится в packagist.org.
    Либо убрать тесты из master ветки, но хранить их в той, в которой ведется разработка, бранчеваться только от нее, и тесты в мастер не мерджить.
    Ответ написан
    5 комментариев
  • Единый API для cms как организовтаь?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Думаю, если
    (без namespace'ов и прочего) для своей cms.

    - то вам рано делать свою CMS. Лучше изучите качественные готовые решения.
    Ответ написан
    3 комментария
  • Проект на ZF1 - как перейти на более новый фрейм?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Многое конечно зависит от специфики проекта, но примерный алгоритм действий в общем случае такой:

    1. Выбираете новый фреймворк (или без него, на ваше усмотрение). Решаете делать новый функционал на нем и только на нем. ZF2/3 ли, Symfony, Laravel - разницы никакой, что вам нравится. Готовьтесь к тому, что придется бизнес логику переписать полностью (если интеграция с фреймворком была жесткой, как обычно делают PHP разработчики). Если была завязанность на абстракциях и модульная структура - вас можно поздравить, переход будет безболезненным и быстрым.
    2. Приготовьтесь, что работы станет больше, чем просто на ZF1 задачи решать и дальше. Постарайтесь не просесть слишком по производительности.
    3. Есть список URL, перенесенных в новое приложение. Решение о том, какому приложению отдать обработку запроса, находится в точке входа в приложение. (в index.php, например. Т.е если обычно там происходит просто инициализация приложения, то перед ним теперь должна быть бизнес-логика определения, какому приложению дать ход, этакий свой мини-роутер. Если переписано - отдаете новому приложению. по дефолту старому)
    4. Если у вас не было тестов - именно тут вы начнете понимать, почему они были нужны :)

    Ну и по факту получается, что у вас некоторое время будет 2 приложения, которые надо параллельно разрабатывать. Старое помечаете как немодифицируемое. Приходит задача - сначала переносите ее на новый фрейм, тестируете, если работает как надо - в своем мини-роутере направляете соответствующие запросы в новое приложение. Постепенно с 0% до 100% доводите - и можно выкидывать старый фреймворк и микро-роутер в индексе, вы переехали.

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

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Как верно ответил Илья, запятая поможет, так как оправка в коде осуществляется банальным mail().
    Но вообще библиотека просто ужасная, лучше бы от такой отказаться.
    Поле получателей приходит из hidden поля формы. Это прямая уязвимость, подменить тут на произвольное можно даже в браузере - и можно слать через ваш сайт что угодно и кому угодно.
    Ответ написан
    Комментировать
  • Что такое M в MVC? Что такое модель Active Record'a? Что должно быть в модели AR?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Active Record - это паттерн, его каноническое разъяснение можно почитать у Фаулера.
    design-pattern.ru/patterns/active-record.html
    https://www.martinfowler.com/eaaCatalog/activeReco...

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

    Представь приложение, где надо к примеру обработать изображение, наложить 3 фильтра, развернуть, залить копию на облако, а вторую выплюнуть в браузер. Логика какая-то нужна? Однозначно, столько действий. Реализуется контроллерами? нет, контроллеру надо просто понять что за запрос и кому его делегировать. Вьюхами? тем более нет, это не про обработку данных. Значит моделями. Что ж тогда, AR лепить (если исходить из AR=модель)? А причем тут AR, в приложении даже базы нет :) Модель понятие гораздо более широкое, и способов организации кода на этом слое неизмеримо больше, чем один паттерн.

    Собственно "модель Active Record-а" - это справедливо для тупых приложений типа CRUD без малейшей логики, кроме сохранения данных в базу, чтения их оттуда, апдейта из формочек и удаления. Где вся логика (слой M приложения) заключается в CRUD-ах.
    Ответ написан
    Комментировать
  • Как настроить кэширование информации о текущем курсе валюты с сайта cbr?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Убедиться, что подключен Memcached (или подключить)
    И в коде
    $m = new Memcached();
    $m->addServer('localhost', 11211);
    if(($data = $m->get('someKey')) === false) {
    // do some actions do get data from remote source
    // place your code here, store result in $data variable
    $m->set('someKey', $data, 60*60*2);
    }
    return $data;
    Ответ написан
  • Не могу разобраться почему не работает namespace или use?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Ну так у Curl namespace не vendor\Curl\ , a просто Curl; Заменить на
    namespace vendor\Curl;
    и попробовать снова

    Хотя в 2017 году стыдно не использовать composer autoloader
    Ответ написан
  • Как запустить YII2 advanced?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Комментировать
  • Образец (CMS, framework, библиотека) правильной архитектуры PHP7 для изучения и тренировки?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Я бы предложил https://github.com/symfony/symfony
    По коммитам видно, что поддерживаемая версия PHP 7.1 .
    Если будет сложновато пойти по Guide и разбираться что и как работает - можно рассматривать каждй компонент изолированно (https://github.com/symfony/symfony/tree/master/src... Один компонент в голове держать несложно, понять его назначение и функционал тоже. И увидеть паттерны, соответственно.
    Если хочется поиграть с данными и UI - то cmf.symfony.com .

    Предложенный xzdshr Laravel - тоже неплохой вариант, а вот Yii2 я не советовал бы. Сам с ним проработал 3 года, люблю этот фреймворк, но именно для изучения (или даже навязывания) правильной архитектуры он не столь подходит. Какие-то вещи срезаны, какие-то объединены для удобства - и лучше не привыкать к этому как к правильному, а прийти к этому когда уже понимаешь, что случилось, и для чего так сделали.
    Ответ написан
    Комментировать
  • Ошибка Parse error: syntax error, unexpected 'public' (T_PUBLIC), expecting end of file in D:\local\htdocs\add\libs\Database.php on line 31?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    catch(PDOException $e){
    $this->error = $e->getMessage();
    }
    }
    }

    одна из закрывающих скобок лишняя

    public function query($query){

    объявляется уже вне класса.
    Ответ написан
    Комментировать
  • Как сделать уведомления для пользователя с php (задача в кроне) в socket.io?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Если правильно понял суть проблемы, то можно попробовать это
    Ответ написан
    Комментировать
  • Правильная работа с фреймворком?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    1. Как уже ответили выше - Vagrant, либо Docker.
    Первый попроще, можно конфиг например онлайн набить и попробовать сразу puphpet.com . По сути Вагрант - это просто отдельный сервер, к которому ты обращаешься (он крутится в виртуальной машине, т.е инкапсулирован). И прокинуты отдельные порты в хост систему + файлы проекта синхронизируются.
    Докер более мейнстримный, более умно использует ресурсы, но порог входа повыше будет. Зато его можно использовать для деплоя.
    В целом и то, и то позволяет делать конфиги и работать с ними в состоянии близком или идентичном тем, что на продакшене.
    2. Если сейчас работаешь с FTP и SFTP - то переходи на связку ssh + git. Это как бы следующий шаг.
    примерно как будет выглядеть разработка и деплой :
    Работаешь с проектом под основной машине, в виртуалке (докер/вагрант) выполняешь код, добиваешься рабочей бизнес логики. Пишешь миграции для данных, если надо, и изменения в коде+миграции коммитишь в репозиторий. Потом по ssh подключаешься к продакшн серверу, где развернут проект, по git pull скачиваешь все изменения и применяешь их, и запускаешь миграции если надо.
    если надо - можешь откатиться.
    Ответ написан
    2 комментария
  • Как реализoвать всплытие кaртoчки клиентa при звoнке?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Между фронтендом и бэкендом устанавливаем WebSocket соединение
    По Webhook передаем в сокет событие
    C сервера оповещаем фронт, и инициируем событие показа карточки
    Ответ написан
    Комментировать
  • Как реализовать поиск по Excel файлам?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Можно воспользоваться elasticsearch , данные из excel загоняются в elastic (решения легко гуглятся), и с бэка работать уже именно с поисковым движком в соответствии с бизнес-логикой
    Ответ написан
    Комментировать
  • Как правильно расставить кавычки?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Такой способ запроса - прямой путь к sql injection
    Правильнее использовать prepared statements ( php.net/manual/ru/pdo.prepared-statements.php )

    $sql= $db->prepare("UPDATE vt SET rc = :value");
    $sql->bindParam(':value',  $js['rc']);
    $sql->execute();
    Ответ написан
    2 комментария
  • Как сделать вывод списка новостей php?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Вероятно вместо <a href="?view=news?news_id=$news_id"> надо <a href="?view=news&news_id=<?=$news_id?>">
    А дальше уже все зависит от роутинга. Пока что как минимум ссылка формировалась неправильно
    Ответ написан
    Комментировать