• Конструкция if или switch?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Второй вариант это хорошая попытка, но недостаточно полно реализованная. Писать надо хотя бы так

    (function() { 
        foreach([true] as $condition) {
            $condition = ($condition) ? true : false; 
            while ($condition) {
                switch (true) {
                    case ($this->inComplete(($oldStatus), ($newStatus))):
                    case ($this->outComplete(($oldStatus), ($newStatus))):
                        ($this->action());
                        ($this->save());
                }
                break;
            }
        }
    })();

    В общем, перед тем как задавать вопрос на тостере, надо сесть и хорошенько сначала самому подумать, каких бессмысленных операторов можно добавить в код, кроме switch.
    Ответ написан
    3 комментария
  • Doctrine как разрешить состояние гонки?

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

    Вот здесь можно посмотреть на практически готовый пример того как должен выглядеть ваш код коммита изменений с учётом использования lock'а.
    Ответ написан
    1 комментарий
  • Почему пустой вывод в PDO запросе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что плейсхолдерами можно подставлять только значения, а не имена таблиц или полей.
    Ответ написан
    Комментировать
  • Почему PHP теряет популярность?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    PHP не мода, php - классика, а классика никогда не умирает. Если умрет php, то умрут все остальные языки backend разработки потому что появится что-то такое, что сможет в разы превзойти пхп в простоте, скорости и удобстве, на данный момент что джава, что питон, что руби +- одинаковые, каждый подходит для своих целей. Тот же питон выбирают из-за простоты интеграции нейронных сетей, но если говорить не о узких, а о главных параметрах (функционал, скорость и тд) все популярные бэк языки более или менее одинаковые смотрите те же сухие графики.
    А о уменьшении вакансий - глупость несусветная. трын тут приведена статистика за 2018 год и обоих графиках по вакансиям лидирует в сравнении с java/python PHP, при том на первых двух пишут как бэкэнд, так и миллион других штук. А на втором графике и вовсе пхп опережает js (единственный язык в самой популярной сфере разработки).

    А вот если речь идет о реально крупных компаниях (amazon, google...) там как раз предпочитают python из-за выше упомянутой простоты интеграции нейросетей, а java из-за стабильной поддержки сверх высоких нагрузок.

    Меньше слушайте диванных экспертов, пхп предрекают смерть с 00-х годов, что то он слишком долго дергается для мертвеца.
    Ответ написан
    1 комментарий
  • Как правильно построить архитектуру Symfony 4?

    @dreamerz
    Как я собираю проэкт Симфонии
    composer self-update
    composer require symfony/symfony-skeletone (требует лимит мемори для пхп свыше 1800М)
    Никогда неделайте ничего при старте вручную - Первое правило =)
    Если Вам вдруг нужна авторизация из-корробки -
    php bin/console make:auth
    Первый Ваш контроллер
    php bin/console make:controller
    > MyShopController
    Нужен класс для связи с БД
    php bin/console make:entity
    > Shop
    в процессе Вам напишут что Реппозиторий создался автомматически
    Мы забыли про БД! Непугайтесь сделайте ещё пару комманд)
    php bin/console doctrine:database:create
    Теперь можно выгружать таблицы:
    php bin/console make:migration
    Теперь чтобы увидеть таблицы в самой БД скажем комманду
    php bin/console doctrine:migrations:migrate
    Вуаля - это Магия Симфонии)

    Если что - обращайтесь

    Если конкретно по-вопросу -
    У меня роутер выглядит так:
    app_product
    path: /product/{slug}/{action}
    controller: App\Controller\ProductController:indexAction

    По ссылке /product/update/#id
    POST ajax request
    ProductController:
    $post = $request->request->all(); // все POST запросы
    $product = new Product;
    $product->setPrice($post['price']);
    ...
    /product/show/#id
    Загружается страничка с продуктом.
    Это конкретный пример логики
    Ответ написан
  • Как организовать сеть контейнеров с помощью docker-compose?

    Использую docker-compose file version 2

    Создаем вручную сеть
    docker network create myglobalnetwork

    Описание сети добавить в каждый файл
    networks:
      mynetwork:
        external:
          name: myglobalnetwork

    Сервисам задаем алиасы для сетей по которым контейнеры будут общаться
    services:
      nginx:
        build: ./nginx
        networks:
          mynetwork:
            aliases:
              - nginx.mynetwork
      postgres:
        build: ./postgres
        networks:
          mynetwork:
            aliases:
              - postgres.mynetwork

    Здесь nginx.mynetwork и postgres.mynetwork являются внутренними dns адресами контейнеров
    Ответ написан
    2 комментария
  • С чего начать при изучении symfony с нуля?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Однозначно начать вот с этого текста: Symfony2 против чистого PHP (перевод отсюда), который буквально описывает твою ситуацию.

    Изучать лучше сразу 3, но за неимением богатого выбора материалов, придется обходиться тем что есть.
    Например есть серия постов на хабре, https://habrahabr.ru/post/301760/
    Ответ написан
    Комментировать
  • Почему Yii/Yii2 не подходит для крупных проектов?

    @karminski
    Senior React.JS Developer
    У нас в компании 4 энтерпрайзных проекта на Yii2. В том числе CRM. В том числе и связь с телефонией, 1С, баг-трекером. Всё работает отлично, без нареканий. О каких "слабых" местах вы говорите? Прекратите читать - начните делать!
    Ответ написан
    7 комментариев
  • В каких случаях вы использовали Redis?

    @chronic86
    Ruby on Rails junior
    1. Хранилище сессий и профилей пользователей;
    2. Сервер очередей, плюс держим в уме механизм publish/subscribe;
    3. Полноценная замена Memcached, притом в случае с Redis мы получим репликацию, более длинные ключи и значения, возможность восстановления кэша с диска и тп;
    4. Место для хранения количества пользователей онлайн, кодов капч, различных флагов, саджестов поисковых запросов;
    5. СУБД для небольших приложений — сокращалок ссылок, имиджбордов, возможно даже блогов;
    6. Роль «словаря» в шардинге, то есть сервер, который знает, какие шарды на каких серверах искать;
    7. Хранилище промежуточных результатов вычислений при обработке больших объемов данных;


    eax.me/redis
    Ответ написан
    Комментировать
  • Правильно ли я понял, как работает токен?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да. Все верно.

    Единственное что добавлю, пересылать токен лучше в заголовках. Причем желательно, поскольку механизм аутентификации нестандартный, в заголовке X-Authorization. Если вы решите хранить токен в куках и передавать его, это желательно должны быть http-only куки (хотя в случае JWT не обязательно) и на сервере должна быть защита от CSRF атак.

    Так же поскольку у нас по сети гуляют по сути креденшелы, важно использовать SSL. Благо сегодня есть lets-encrypt что бы бесплатно получить сертификаты.

    И последнее, что бы обезопасить себя еще, используйте refresh-токены. То есть наш уникальный токен который гуляет в каждом запросе будет иметь ограничение по времени жизни (скажем 5 минут) и для его обновления мы будем использовать refresh-токен. При получении refresh токена клиенту уходит новая пара токен + refresh-токен.

    Таким образом у злоумышленника который перехватил токен пользователя будет окно всего в 5 минут что бы что-то сделать.
    Ответ написан
    13 комментариев
  • Из чего состоит окружение продвинутого php разработчика?

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

    1. docker-окружение
    (в 90% случаев для веб-разработки достаточно php -S 0.0.0.0:8000)
    виртуальные машину становятся нужны:
    - когда надоест переустанавливать хост-систему из-за обилия хлама
    - когда работаешь с несколькими проектами имеющие специфические (разные) настройки окружения(php, web-сервер, база)
    - когда надоест решать проблемы в команде из-за того что по разному настроено окружение

    2. git - система контроля версий
    Помнить что ты и когда изменял, должен не человек, а машина.
    Это необходимо:
    - чтобы не испортить всю работы за прошедший год нажав del
    - чтобы определить кто из команды злодей и все испортил
    - чтобы не думать как перенести свежую версию проекта с одной машины на другую

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

    4. behat + phpspec
    Тесты нужны:
    - когда хочется почувствовать себя безопасности и для сладко спать ночь, забыв о кошмарах о сломанном коде
    - когда в production все снова сломалось
    - когда ты написал одну новую фичу, а сломал три

    5. zsh
    Хорошей консолью приятно пользоваться, работа идет быстрее.
    Консоль есть жизнь, жизнь есть shell.

    6. tmux
    Мало одно окошка в консоли, тогда tmux идет к вам.
    В качестве бонуса получите возможность парного программирования совершенно бесплатно

    7. tmuxinator
    Надоело каждый раз открывать кучу окон для tmux, попробуйте его )
    8. vim
    - Потянуло на что-нибудь необычное?
    - Хочется эффективнее писать код ?
    Ну что открыли vim? В первый раз? Поздравляю закрыть вы его не сможете )
    Вызывает зависимость при частом потреблении


    9. continuous integration сервер
    Вообще ci сервер это одушевленная машина. Это твой тамагочи, ты кормишь его хорошим кодом, он радуется и ты видишь приятный зеленый огонек. Если ты дал с код от скажет что не вкусно. Ну а если ты ему, что гнилое он будет долго на тебя орать плохими словами. Со временем он растет и учится делать более серьезные вещи, и начнет помогать тебе:
    Его скилы:
    - он может сам выполнить 10 минутные тесты
    - подготовить и опубликовать проект
    - рассказать о твоем коде, даже то что ты не знаешь
    Он легко обучается и ты легко сможешь научить его удивительным вещам.

    10. куча линтеров на pre commit hook
    Чтобы ci не кормить плохими продуктами, хорошо бы проверять что ты сделал до отправки на сервер. Что бы не забыть это сделать git сам работу.

    11. gulp
    gulp - это еще один твой помощник.
    как если использовать, как watcher файлов + livepreview, можно забыть о F5 в браузере

    12. bower
    Тоже что и composer но для управления ассетами. Это я о всяких jQuery и Bootstrap

    666. Линукс
    Даже если не хочется ставить как хост-систему, его все равно надо знать. Ваш код будет работать на нем )
    Ответ написан
    16 комментариев
  • Как сделать автоматическое снятие денег за подписку клиента?

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

    p.s. Если нужно сделать такое решение, то для Joomla оно у нас есть joomlaplus.ru
    Ответ написан
    Комментировать
  • Как передать уведомление с помощью session->setFlash другому пользователю?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    с помощью session->setFlash другому пользователю?

    Никак, session->setFlash использует сессию текущего пользователя, и ничью другую. В вашем случае вам нужно вводить какой-то push сервер и передавать нотификации ему.
    Ответ написан
    Комментировать
  • Как правильно использовать кэш в Yii?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Кэш использовать очень просто.

    Когда ты уверен, что работа с данными оптимизирована на 100%, и все равно скорость неудовлетворительная - тогда надо начинать использовать кэш.

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

    Или я не прав?

    Неправ.
    Выборки по первичному ключу вообще никогда кэшировать не надо.
    Твое заблуждение состоит в том, что ты полагаешь БД каким-то неповоротливым монстром, который без кэширования шагу не сделает. Это, мягко говоря, не так. Большую часть запросов вообще кэшировать не нужно. А уж выборка одной строки по первичному ключу всегда будет быстрой, независимо от того, насколько загружен сайт.
    Ответ написан
    8 комментариев
  • Стоит ли изучать yii с нуля?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Три ответа и куча лайков.
    Что характерно, если тех же самых людей спросить, надо ли хэшировать пароли на сервере - все дружно, строем и хором ответят - НУЖНО!

    При этом мысль, как совместить обе технологии, не приходит в голову ни одному из них. А они не совмещаются. Если "сервак со своей стороны так же солит пароль и считает хэш" то это значит... что пароли хранятся в открытом виде!

    Это квинтессенция подобныйх сайтов. Ответ почему-то всегда даётся самый буквальный. При этом вопрос никогда не подвергается сомнению или хотя бы минимальной проверке на осмысленность. Такое ощущение, что отвечающие воспринимают вопрос как экзамен что ли? Или как челендж - ответить любой ценой, пусть даже и неимоверных извращений и ГАРАНТИРОВАННЫХ граблей в будущем. Или - как сейчас - ценой СНИЖЕНИЯ защищенности! Но зато ответ буквальный. И так не только здесь - так практически в любом ответе. Ну никогда ни у кого не твремени задуматься над вопросом - все торопятся отвечать.

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

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

    Перед тем как отвечать, НАДО СНАЧАЛА ПОДУМАТЬ. Посчитать на ход вперед - "а что будет, если сделать, как я советую?" Посчитать на ход назад - "а зачем ему нужно это? Не похож ли этот вопрос на мой собственный, который я когда-то задавал от недостатка знаний?" И попробовать ответить так, чтобы РЕАЛЬНО помочь спрашивающему, а не просто выдать зазубренный ответ.

    Возвращаясь к вопросу: нет, нельзя без SSL. Хэширование на сервере важнее.
    Можно эмулировать SSL для передачи пароля, но куда проще воспользоваться готовым механизмом. На дворе 2014 год, все основные сайты перешли на шифрование всего трафика вообще. Пора переставать бояться SSL.
    Ответ написан
    11 комментариев
  • Как убрать /web/ из URL Yii 2.0?

    @slvABTOP
    а настроить веб-сервер что бы rootdirectory был /basic/web?
    Ответ написан
    1 комментарий
  • Yii::t() и autocomplete - как сделать?

    AloneCoder
    @AloneCoder
    [object Object]
    Вам проще поменять структуру на name_ru и name_en и уже искать в нужном столбце в зависимости от локали
    Ответ написан
    4 комментария
  • Почему Docker юзают в связке с Vagrant?

    fardok
    @fardok
    Golang
    Ключ -v докера пробрасывает папки
    Ответ написан
    Комментировать