• Через какую программу лучше обновлять файлы на сервере (сайт)?

    Melkij
    @Melkij
    PostgreSQL DBA
    Внесли правки, закоммитили в гит, запушили в репозиторий. Сервер непрерывной интеграции раскатал изменения на окружение, подобное боевому. После проверки раскатывает на боевое окружение.

    Если речь о dev-машине - то кому как удобнее:
    - vagrant с шареной директорией (ну или просто виртуалка и sshfs/nfs/etc)
    - воткнуть dev-окружение сразу на рабочую машину
    Ответ написан
    Комментировать
  • Как удалить содержимое DIV?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Регуляркой разбирать html не очень удобно. Воспользуйтесь, например, PHP Simple HTML DOM Parser
    include('simple_html_dom.php');
    $html = str_get_html('<html><div id="main"><div id="inside">текст</div><div class="class">текст</div></div>');
    $html->find('div#main', 0)->innertext = '';
    $outText = $html->save();
    Ответ написан
    9 комментариев
  • Возможно подключить FOSUserBundle на средней стадии разработки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Можно, но задайте себе вопрос, зачем? Если вам на 90% хотя бы функционал FosUserBundle нужен - то может и имеет смысл.

    В любом случае - разницу базы данных можно разрулить миграциями (DoctrineMigrationBundle).
    Ответ написан
    5 комментариев
  • Есть ли смысл покупать MacBook Air для веб-разработки?

    Jeth
    @Jeth
    UI/UX-дизайнер и JR iOS Dev в airlab.me
    Air для разработки нет, но Pro - однозначно, и лучше на 15". Вообще, линейка MacBook, как по мне, идеально создана для работы, только девайс надо внимательно выбирать под требуемые задачи.

    На первое время "когнитивный диссонанс" при работе на OS X обеспечен, но чем дольше будешь его оприходовать и привыкать, тем больше будешь понимать, что Windows сущее дерьмо (с Linux не работал) и, возможно, появится ностальгия за потерянным временем работы на Win.

    Однако, как и вся продукция Apple, цена очень завышена. 20-30% надо бы скинуть, но тут выбирать не приходится: либо берёшь, либо проходишь мимо.

    ;)
    Ответ написан
    2 комментария
  • Какой Фреймворк выбрать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Фреймворк для Ajax сайта?

    Любой. Если сайт простенький - Silex. Если сложная бизнес логика - Symfony2 или Laravel.
    Ответ написан
    Комментировать
  • С чего начать web разработчику ?

    @kirill-93
    Когда я решил попробовать себя в этой сфере, я накидал себе план обучения. Что то типа html > css > js > php. Ну разумеется для начала общие сведения обо всем этом. Так как вообще не понимал что и для чего. Потом много смотрел видео уроков и сам тренеровался. Научился делать (как мне тогда казалось) интернет магазин и пошел устраиваться на работу. Взяли стажером и оказалось что я очень мало знаю. Мало из того что я учил мне пригодилось. На практике все оказалось немного иначе. Я проработал там пол года, затем ушел в другую компанию (более крупную) с мыслью "ну теперь то я кое что могу). И придя на новое место снова оказалось что я совсем новичок. так как инструменты которые тут использовались были другими. Я менял еще несколько мест, каждый раз находя более профессиональный коллектив. И каждый раз узнавал много нового. Я к тому что самый лучший способ научиться делать хорошо - работать с теми, кто лучше вас. Это конечно может быть сложно, но это будет в десятки раз продуктивнее, чем развиваться самому.
    Ответ написан
    3 комментария
  • Как сохранить результат foreach как переменную ?

    $c = [];
    foreach ( $t as $p ) {
          $c[] = $p->id;
    }
    $c = join( ', ', $c );
    Ответ написан
    Комментировать
  • Как разобраться в философии symfony2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Бандлы - самодостаточные модули инкапсулирующие какие-то сервисы и прочую штуку. По сути это расширения для DependencyInjection, если очень грубо.

    Модели - это те самые Entity грубо-говоря. Вообще есть такое понятие как Доменная-модель. Это просто структура данных, сущности которыми оперирует бизнес логика. Последняя должна быть инкапсулирована в сервисы (всякие UserManager, PostManager и т.д.). В Yii модели смешаны с сервисным слоем и по этому у вас получается путаница.

    Что до кода... есть распространенный подход иметь свой AppBundle и фигачить все в нем. Есть так же рекомендуемый подход - не использовать бандлы вообще. То есть.... бандлы должны быть самодостаточны и их основное предназначение - реюз логики между проектами. Бизнес-логику приложения реюзать у вас не выйдет, поэтому рекомендуется просто писать код и регистрировать его в app/Resources/config/services.yml или что-то в этом духе, как именно решать вам. Профит в том что вы на замарачиваетесь всей этой фигней с бандлами и у вас возникает меньше вопросов по структуре. А если же вы захотели что-то вынести в бандл - например сервисы для авторизации которые реально можно реюзать, то вам никто не помешает это сделать. В итоге у вас будет структура проекта приблизительно такая:

    | - app
    | - var
    | - src
      | - Controller
      | - Entity
      | - Bundle/
        | - MyAuthBundle/
    | - web


    ну как-то так. Как не странно такой подход не сильно распространен в Symfony-сообществе хотя его рекомендуют в недавно вышедшем бест практис буке и в принципе эта струтктура более чем логична.

    Что до виджетов, в Symfony2 есть HMVC. То есть вы можете сделать эдакие под-запросы на другие контроллеры внутри вьюшек. Можно скажем все "виджеты" инкапсулировать как отдельный контроллер с методами и дергать их из вьюшек.
    <div id="sidebar">
        {{ render(controller('AcmeArticleBundle:Article:recentArticles', {
            'max': 3
        })) }}
    </div>


    Это дает больше гибкости, внутри каждого контроллера можно дергать другие контроллеры. Можно прикрутить кеширование на уровне обработки запросов (кешировать скажем все подзапросы по каким-то критериям) и т.д.
    Ответ написан
    8 комментариев
  • Какой ваш любимый PHP Framework?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    И да начнется срач

    1. Symfony2
    2. Silex, Yii1, Slim, FatFree, CakePHP, Zend1 (если мы про проекты а не потыкать)
    3. Если волнует качество кода, то лучше не придумать. Все по best-practice, огромное сообщество разработчиков. двигатель мира PHP.
    4. Для простых проектов может быть черезчур избыточным и сложным. Необходимо понимание того что делаешь.
    5. Нормально, с кешерами, грамотной архитектурой, правильно настроенным сервером... Пожалуй это самый малозначительный параметр для выбора фреймворков. Все упирается в архитектуру вашего приложения и базу.
    6. Не веду такой статистики. Большая часть проектов - API сервисы либо внутренние сервисы компаний. Да и считаю это пустым.
    7. Нет.

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

    @young8junkie
    Symfony 2 - академичность, слабосвязность, продуманность. Немного Java way. Для изучения правильного ООП - лучший вариант. Немного выше уровень вхождения, потому несколько менее популярен.
    Yii - быстрый и простой. Немного костылей, немного велосипедов, компоненты сильно связаны.
    Симфони - большие и средние проекты.(Для малых проектов можно попробовать Silex, он базируется на компонентах симфони).
    Йи - средние и маленькие.
    Для выбора покопайте два варианта и выбирайте что больше понравилось. Ещё попробуйтей Laravel, он главный нишевый конкурент Yii
    Ответ написан
    6 комментариев
  • Есть ли php библиотека для работы с MySQL?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Тыщи их.

    Лично я рекомендую Doctrine ORM.
    Ответ написан
    Комментировать
  • Как веб-страницу сохранить в PDF?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    воспользоваться wkhtmltopdf или же взять за основу phantom.js.
    Ответ написан
    Комментировать
  • Как запустить PHP скрипт с задержкой в несколько часов?

    fornit1917
    @fornit1917
    Автор, зря вы считаете что организация очереди отложенных задач с помощью крона и базы данных это не очень хорошая идея. Это хорошая идея. Данный подход прост, популярен, эффективен, используется довольно широко. А вот о подходе с динамической постановкой/удалением задачи в крон из пхп я слышу впервые и он попахивает костылями имхо.
    Вас зря смущает, что "крон задача будет ничего не делать 99% времени". От того, что скрипт каждую минуту будет запускаться по крону, смотреть в бд есть ли для него работа и, если нет, завершаться - не будет никаких негативных эффектов, это практически не потребляет никаких ресурсов.
    Ответ написан
    Комментировать
  • Как запустить PHP скрипт с задержкой в несколько часов?

    kotomyava
    @kotomyava
    Системный администратор
    Вам надо запускать по крону регулярно скрипт, который будет смотреть, есть-ли какая-нибудь задача и подошло-ли время её выполнения. И Если да, выполнять. Если в процессе выполнения произошла ошибка куда-нибудь сохраняется время(файл, база, key-value), когда надо будет повторить попытку.

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

    taliban
    @taliban
    php программист
    Никак не шифровать, просто генерите отдельно ключ и связывайте его с конкретным сайтом. Глупо заниматься мега шифрованием, если можно отдельно создать ключ.
    Ответ написан
    Комментировать
  • Как зашифровать id, чтобы получив этот закодированный id можно бы его расшифровать и получить id?

    @BasilioCat
    По-моему вам просто надо сравнивать referer запросов с зарегистрированными доменными именами сайтов в вашем сервисе. Никто не мешает скопировать зашифрованный id и вставить его на другой сайт с таким же успехом. "Вызов" урла фрейма все равно инициируют обычные пользователи из браузера, заниматься подлогом реферера им нет резона. Для тех параноиков, у которых отключена передача реферера - просто не блокируйте виджет при пустом реферере.

    Для подтверждения неизменности урла в абстрактном случае же лучше использовать подпись - например url?id=123&hash=123456789abcdef, где hash=md5($id.$secret_key);
    Возможностью проверки таких подписей обладает даже nginx
    Ответ написан
    2 комментария
  • Symfony2 как правильно почистить кэш?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    при правке кода используйте другую точку входа (app_dev.php).
    чистка кэша производится из консоли:
    app/console cache:clear
    для продакшена нужно указать окружение добавив параметр --env=prod. ПО умолчанию все консольные команды запускаются в dev окружении.
    Итоговая команда будет
    app/console cache:clear -e=prod.

    Еще один маленький бонус - вы можете писать названия команд не до конца. Например
    app/console cach/cl - главное что бы написанного хватало что бы выбрать нужную команду.
    Ответ написан
    5 комментариев
  • Несколько вопросов к толковым разработчикам относительно mvc и php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    M — модели… если упростить — это просто проекция вашего хранилища данных (будь то ORM/ODM или обычные файлы) на объекты. И все… Бизнес логику они содержать не должны. Так же модель никак не должна знать как именно она будет сохраняться в хранилище, ибо тогда при смене хранилища начнутся приключения. В этом смысле концепция AR в том виде, в котором она реализована в Yii мне не нравится. Какой-то класс CActiveRecord который знает кучу всего о том что и как он будет сохранять, и от него надо наследовать нашу простенькую модельку содержащую в себе всего пару полей. Опять же есть разные реализации паттерна ActiveRecord, хотя мне больше по душе DataMapper (например Doctrine), при котором у вас есть отдельный компонент, знающий о том что и куда пихать. Логика по выборкам в этом случае выносится в репозитории, эдакие менеджеры записей. Плюсы этого способа — очень легко в системе заменить тип хранилища, расширять и поддерживать за счет слабой связанности компонентов. Контроллеры знают только о том что есть репозитории, которые имеют для каждой записи свой интерфейс (аля getPendingPayments()), и они не знают откуда эти модели выходят, из базы, висят в памяти или еще чего.

    V — тут все просто… шаблоны призваны отвязать представление от логики работы с данными, что бы изменение первого не вызывало редактирование какого-то сервиса/контроллера.

    C — тут сложнее. Есть две концепции, толстые и тонкие контроллеры. Последние наиболее распространены, и включают в себя два слоя: сами контроллеры и сервисный слой. Контроллеры разруливают какое действие нужно произвести с данными в зависимости от пришедших параметров, прав пользователя и т.д. Они же разруливают ситуации когда нету исхомых данных, различные ошибки и т.д. Вся бизнес логика же выносится в сервисный слой. Сервисы должны минимально знать о контексте использования и заниматься только тем, для чего они были написанны. Скажем, сервис валидации данных ничего не должен знать о сервисе для обработки платежей, или о правах доступа и т.д. Ему на вход приходят данные, и он их проверяет по правилам, описанным для этой модели.

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

    Так же при работе с сервисами очень помогает использование контейнера зависимостей. Благо готовых реализаций (как простых, как Pimple так и сложных, как например DiC в Symfony2 или Zend2) достаточно много.

    p.s. Мое мнение не претендует на истину. Если кто-то увидел что-то в таком подходе что-то не корректное, буду рад если укажите.
    Ответ написан
    Комментировать