• PHP. Яндекс Карты. Как определить расстояние между двумя точками по дорогам?

    Здесь можно посмотреть документацию по получению продолжительности и расстоянию маршрута между двумя точками с помощью CURL
    https://tech.yandex.ru/routing/doc/distance_matrix...
    Ответ написан
    Комментировать
  • Что делать, если нужно получить часть данных сущности?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Для отображения используйте DTO и доставайте их из репозитория. Для логики отображения негоже сущности из бизнес-слоя вытягивать.

    1 способ — заюзать Доктрину
    сразу не увидел, что вы без нее работаете

    Доктрина умеет создавать дтошки из коробки
    class PostDTO
    <?php
    
    namespace App\DTO;
    
    class PostDTO
    {
        /** @var string */
        private $name;
        
        /** @var string */
        private $description;
        
        /** @var string */
        private $text;
        
        public function __construct(string $name, string $description, string $text)
        {
            $this->name = $name;
            $this->description = $description;
            $this->text = $text;
        }
    
        public function getName()
        {
            return $this->name;
        }
    
        public function getDescription()
        {
            return $this->description;
        }
    
        public function getText()
        {
            return $this->text;
        }
    }

    И используя синтаксис NEW DQL создаем наши DTO :
    $query = $em->createQuery('SELECT NEW App\DTO\PostDTO(p.name, p.description, p.text) FROM App\Entity\Post p');
    $users = $query->getResult(); // array of PostDTO

    Источник: https://www.doctrine-project.org/projects/doctrine...

    2 способ — заюзать DBAL/PDO
    Сделать запросы через более низкую прослойку без ORM (например через Doctrine DBAL или PDO) и результат фетчить в те же самые PostDTO в репе
    Ответ написан
    2 комментария
  • Куда податься с такими навыками?

    Sanes
    @Sanes
    В офис. Не обязательно там сидеть. Можно удаленно работать.
    Фриланс, это предпринимательская деятельность. Не каждому дано.
    Ответ написан
  • Как в symfony 3.4 вывести логин (или какие-либо данные) в базовый шаблон?

    BoShurik
    @BoShurik Куратор тега Symfony
    Symfony developer
    1. Рендер контроллера внутри шаблона
    https://symfony.com/doc/3.4/templating/embedding_c...
    {{ render(controller(
        AppBundle:Article:recentArticles',
        { 'max': 3 }
    )) }}

    2. Кастомный Twig Extension, который добавляет функцию, реализующую нужную логику
    https://symfony.com/doc/3.4/templating/twig_extens...
    {{ articles(3) }}
    3. Если надо выводить что-то простое, к примеру, версию приложения, то можно использовать глобальные переменные
    https://symfony.com/doc/3.4/templating/global_vari...
    {{ app_version }}
    4. Какие-то вещи доступны в глобальной переменнойapp, к примеру, тот же инстанс залогиненого пользователя
    {{ app.user.username }}

    Это справедливо для всех версий Symfony
    Ответ написан
    Комментировать
  • Почему PHP теряет популярность?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Никогда не ведитесь на уговоры разрабатывать какой то веб проект на каком то экзотичном языке, например Питоне или Яве, в результате вы получите костыльный долгострой и дефицит программистов которые будут готовы над ним работать.
    Это как в моде - есть всякое эпатажное дерьмо для показов на подиуме, а есть повседневные джинсы с рубашкой, все любят обсуждать эпатаж но носят джинсы.
    Ответ написан
    26 комментариев
  • Стоит ли учить 1C?

    @mvladlin
    Не стоит в 1С, минусы, по моиму ИМХО:
    1. От программиста 1С ждут хорошего знания бухучета, даже лучше чем у обычного бухгалтера;
    2. Приходится общаться с бухгалтерами, начиная с самого низкого звена;
    3. Навыки приобретенные с 1С не помогут при изучении других языков/технологий.

    Лет 20 назад я связался с 1С, последние лет 10 пытаюсь перейти на что-то другое - до сих пор полностью не перешел. Резюме "замарано" 1С.

    Лучше JavaScript, надоест - перейдете например на Java
    JavaScript -> Java это нормально, некоторые HR'ы даже не увидят разницы :)
    1С -> Java - будут вопросы
    Ответ написан
    1 комментарий
  • PHP: mkdir, почему permission denied при 0777?

    @cmx Автор вопроса
    Проблема была в SELinux Policy, спасибо @Sander_Li

    Решение:
    # chcon -R -t httpd_sys_content_rw_t /project_root

    Взято с: stackoverflow.com/questions/13908722/php-unable-to...
    Еще можно посмотреть здесь: https://coderwall.com/p/uahuma
    Ответ написан
    1 комментарий
  • Какие тренды или проблемы сейчас в игровой индустрии?

    sim3x
    @sim3x
    По сути всем плевать на актуальность
    От вас требуют формальную актуальность
    Иначе ваш научрук выдал бы с десяток (сотен) реальных проблем, которые ему нужно решить на вчера в его научной работе

    Единственная реальная проблема игростроя - наличие в ней маркетологов и других любителей "surprise mechanics"

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


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

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    23 года? И столько тлена в словах? Ну ловите мою кулстори, у меня тлена в 23 было куда больше...
    Чуть менее двух лет назад, летом 2013, мне было 23, и я имел НОЛЬ опыта работы (если не считать 2 месяца стажерства в магазине комп техники по практике от универа). Кое-как устроился seo-шником в местную веб-студию, даже не зная что это за работа, во время отправления резюме (гуглил после уже). Конечно, как только приступил к работе, сразу понял что seo это не мое, но это помогло мне через 3 месяца на том же месте стать веб-джуниором. И вот я стал джуном, имея за плечами 4 курса на codecademy и одну, плохо прочитанную, книгу. С космической зп в 12к рублей! Через 5 месяцев я уже приступил к работе по удаленке с другими людьми, где платили 30к, и при этом можно было работать по 15-25 часов в неделю. Это позволило мне читать все интернеты на тему фронтенда, а потом, самое важное, пилить демки на кодпене, засиживаясь до ночи. В марте уволился, отдохнул, и в апреле начал очень лениво заполнять профили на зарубежных фриланс биржах. А потом на меня внезапно свалилось подобие сарафана из-за моих демок, и люди просто стали писать мне с предложением что-нибудь запилить, хотя профили я так и не запилил на биржах. Сейчас пилю 2 проекта, с рейтом в 30$/h, для клиентов пустяковая цифра, а для моего Архангельска это вообще какой-то криминал :)
    Ну а вам, с вашим имеющимся бэкграундом, вообще не знаю чего бояться. Проблемы могут быть, только если окажется что программирование это "не ваше". Если же вы любите это дело, то просто садитесь, и начинайте пахать. В первую очередь на свое саморазвитие, поначалу я бы даже посоветовал искать что-то с удобным графиком/местом работы, ибо "неудобная" офисная жизнь убивает весь энтузиазм как правило. А без энтузиазма на старте никуда не уехать.
    Ответ написан
    16 комментариев
  • Почему одни images могут запускаться в фоне, а другие нет?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Потому что для того чтобы докер-контейнер оставался работать в фоне - нужен запущенный процесс в контейнере, чтобы обслуживать его.
    ubuntu и debian после запуска завершаются, потому что нет запущенных процессов
    а Postgres и php-fpm запускают соотвествующие процессы у себя в контейнере
    В качестве хака - добавив к примеру строку к контейнеру в docker-compose:
    command: tail -f /dev/null
    вы удержите контейнер запущенным в фоне, потому что контейнер будет обслуживать процесс tail -f /dev/null
    Ответ написан
    Комментировать
  • Как в Symfony дебажить event?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Продебажить event или все же listener/subscriber?
    Если последнее, то напишите тест, в котором соберёте нужный евент, и передадите его в слушателя, попутно проверив, что все выполняется...

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

    Если без тестов — Запилите простенький контроллер, в котором киньте событие, и продебажьте результат, этот способ займёт 5 минут...

    UPD: С телефона нашёл пример: www.inanzzz.com/index.php/post/04ad/testing-event-...
    суть передает
    Ответ написан
    Комментировать
  • Как сделать unit test метода в котором нужен заполненный массив?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    По-хорошему $this->solutions должно устанавливаться через конструктор, потому вам не составит труда заинжектить это состояние в тестируемый объект.

    Если у вас "пришлось", то можете заюзать некий хак, например через рефлексию/closure::bind установить состояние в тестируемый объект.

    Вот на скорую руку накидал (Разместите его в своем TestCase или прямо в тесте)
    protected function setPrivateProperty(object $object, string $propertyName, $value): void
    {
        $reflectionClass = new \ReflectionClass(get_class($object));
        $property = $reflectionClass->getProperty($propertyName);
        
        $property->setAccessible(true);
        $property->setValue($object, $value);
        $property->setAccessible(false);
    }


    ПРИМЕР
    Класс и метод, который нужно протестить и приватная переменная которого заполняется не через конструктор
    class System 
    {
        // Не важно, как оно будет заполнено, важно, 
        // что в методе мы проверяем некоторые значения  
        // и мы создадим ниже в тестах эти ситуации разными тест-кейсами
        private $solutions;
    
        public function checkRecords(): string
        {
            if (count($this->solutions) === 3) {
                return 'full';
            }
    
            if (count($this->solutions) === 6) {
                return 'overflow';
            }
    
            throw new IncorrectCountException('Incorrect solutions count.');
        }
    }


    Тесты
    public function testCheckRecordsFull(): void
        {
            // 3 элемента
            $data = [1, 2, 3];
            $system = new System();
            $this->setPrivateProperty($system, 'solutions',  $data);
    
            $status = $system->checkRecords();
    
            $this->assertEquals('full', $status);
        }
    
        public function testCheckRecordsOverFlow(): void
        {
            // 6 элементов
            $data = [1, 2, 3, 4, 5, 6];
            $system = new System();
            $this->setPrivateProperty($system, 'solutions',  $data);
    
            $status = $system->checkRecords();
    
            $this->assertEquals('overflow', $status);
        }
    
        public function testCheckRecordsIncorrectCOunt(): void
        {
            // сколько-то элементов, но не 3 и не 6
            $data = [1];
            $system = new System();
            $this->setPrivateProperty($system, 'solutions',  $data);
    
            $this->expectException(IncorrectCountException::class);
            $system->checkRecords();
        }

    Код тестовый, просто отобразить принцип, возможно у вас в классе зависимости -- нужно будет сделать моки и т.д. Тут некоторые повторения можно вынести в setUp().
    Также хочу обратить внимание, что тесты построены по принципу ААА (Arrange, Act, Assert).
    Как итог, 3 ситуации, все протестированы, методу не важно, как заполнлась приватная переменная, но вся его логика протестирована. Все легко и просто.
    Ответ написан
    7 комментариев
  • Как сгенерировать миграции по сущности вне src/Entity?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Нужно добавить маппинг в настройках /config/doctrine.yml (ну или в том файле, где эти настройки лежат):
    Для 4 версии: https://github.com/symfony/demo/blob/master/config...

    doctrine:
         orm:
                mappings:
                      UserEntities:
                           type: annotation
                           dir: "%kernel.root_dir%/../src/Models/User/Entity"
                           is_bundle: false
                           prefix: <YOUR_NAMESPACE>\Models\User\Entity
    Ответ написан
    1 комментарий
  • Как указать доктрине, какой неймспейс использовать?

    Melkij
    @Melkij
    PostgreSQL DBA
    Слово namespace здесь неверно.
    Ищите по schema name и конкретно search_path

    Странно что вы не знаете что такое search_path, но он у вас модифицирован. В дефолтную настройку схема public включена и потому оба ваших запроса обычно делают одно и то же.

    В доктрине начиная с 2.5 схема указывается так:
    /**
     * Clerk
     *
     * @Table(schema="schema")
     */
    class Clerk { }

    Не уверен что будет работать для public схемы если доктрина предполагает что оно в search_path есть и так.
    Ответ написан
    1 комментарий
  • Как в GIT удалить файл из отслеживания?

    @Mozzart88
    1. git rm --cached <назване файла> - ключ --cached удаляет указанный файл только из индекса, но сам файл
    2. а дальше как указано выше - добавляем файл в .gitignore (можно наоборот - сперва добавить в .gitignore а потом удалить его из индекса)
    3. и коммитимся
    Ответ написан
    Комментировать
  • Правда ли, что сейчас так сложно найти работу?

    Zoominger
    @Zoominger
    System Integrator
    Сложилось впечатление, что рынок очень сильно переполнен

    Верное впечатление.

    А как при таком раскладе, ищут работу люди ниже уровня сеньора?

    В целом, страшно только в сфере веба, нормальные программисты ищут работу относительно легко.

    Может уже прошли те золотые it времена

    Да. Теперь это бизнес.

    весь хайп о "молочных реках и кисельных берегах" выгоден только вайтишным курсам?

    Да.
    Ответ написан
    17 комментариев
  • Где лучше качество кода?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Все плохо
    • Глобальные переменные — зло
    • На лицо некий код, который и с сессией работает и с БД — явное нарушение общепринятных принципов, например SRP
    • $dao как инициализирована? Явно не через конструктор
    • Использование цифры, вот сиди гадай по ней — это плохо, используйте именованную константу. Например 3 — это некий статус для desktop, вот и назовите ее STATUS_DESKTOP, хотя далее...
    • вы обращаетесь к одному методу, который шибко умный — работает с флагами, тем самым нарушая SRP и сам содержит if/else, сделайте просто 2 раздельных метода:
      getMobileOpinionList()
      getDefaultOpinionList()

    • Предикат лучше вынести в отдельный метод isMobileOnly(), тк условия могут поменяться в нем, не будете же везде в if менять по всему проекту
    Ответ написан
    33 комментария
  • Как вручную очистить кэш Laravel?

    eldario666
    @eldario666
    А причем тут config:cache ?
    Может так?
    Route::get('clear', function () {
        Log::debug('CLEARED');
       Artisan::call('cache:clear');
    });
    Ответ написан
    1 комментарий