• Что означает эта запись?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    это имя модуля. Вы объявляете модуль с названием "controllers.ckeditor", который зависит от модуля "ckeditor".

    ну и да - получше поучите ангуляр. И если собираетесь его именно учить - пока игнорируйте доку на оффсайте и полазайте на github в официальном репозитории. Там в пулреквестах доку конкретно переписали уже.
    Ответ написан
    1 комментарий
  • Почему правильнее делать сайт по mvc?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    У вас может быть и модель, и прдставление и контроллер хоть в одном файле, суть то не в этом.

    MVC описывает не все приложение (есть Model2 которое убого но описывает все приложение, но я бы не рекомендовал вам сейчас на него ориентироваться). Оно описывает только "как сделать так, что бы приложение ничего не знало о UI".

    Например есть "модель" представляет собой "переднюю часть приложения" или ее публичный интерфейс (как интерфейс объекта можно воспринимать если упрощать). Это не один объект, а как правило множество разных объектов. Но контроллер работает только с вершиной этого "графа", и инкапсуляция не даем ему знать ничего о "нутре".

    Далее, у нас есть представление. Вопреки вашему мнению, представление это не html а http. Поскольку PHP должен сформировать именно HTTP ответ (так или иначе, при помощи echo и header или при помощи абстракций над http). Просто обычно сайтики в качестве тела ответа содержат html. Но намного проще воспринимать "представление" как HTTP ответ. "шаблонизаторы" в этом плане не относятся к представлению, это способ его генерации. Сделаем допущение что весь view в нашем MVC это обычный HTTP ответ. Просто кусок текстовой инфы выплюнутый в буфер вывода. Помимо HTTP есть еще варианты: CLI или консольные скрипты, у них сфой формат представления. А еще есть менеджеры очередей и кучи других вариантов.

    Так же есть еще HTTP запросы, которые по сути являются частью представления, а точнее может восприниматься как какое-то действие пользователя. Причем под пользователем я подразумеваю не обязательно живого человека, а все что угодно, что может отправлять запросы. Браузеры, боты, краулеры, ваше же приложение.

    Ранее мы уже сказали что "шаблонизаторы" это не часть представления а только способ его получения. Где мы должны использовать шаблонизатор тогда? Как сделать так, что бы наша "модель" или точнее наше приложение ничего не знало об этом "шаблонизаторе" (или сериалайзере, или json_encode, или еще чем-то там)? Положим между представлением и моделью что-то промежуточное - контроллер.

    Опять же контроллер - это не обязательно один объект. Это может быть целая цепочка объектов, которая может передавать запросы друг дружке и что-то с ними делать. Например один "контроллер" глянет мол "ага, он в качестве тела запроса прислал json - десериализуем". А второй контроллер такой "ага, он должен быть авторизован - надо проверить". Ну и т.д. покуда мы не дойдем до последнего контроллера в цепочке, который уже будет дергать "один" метод модельки. Это слой адаптеров между http и нашим приложением. Вот ключевая мысль MVC на бэкэнде (или ели точнее Mediating controller MVC или MVA, паттерн который реализован в большинстве современных бэкэнд фреймворков).

    Зачем нужно отделять UI от приложения? потому что что-то из этого явно меняться будет чаще и не одинаково. А еще можно распаралелить работу. А еще можно заменить реализацию одной из частей без вреда для другой. Словом мы получаем намного больше гибкости, но только если приложение ничего не знает о представлении.. В противном случае мы получаем антипаттерн под названием smart ui, для борьбы с которым 40 лет назад и придумывали MVC.
    Ответ написан
    3 комментария
  • Как решить проблему с роутингом в Symfony 3?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Можно их как-то объединить?

    Вы можете указать у двух правил маршрутизации один экшен контроллера. Но не "объеденять правила". В целом не рекомендую "объеденять" эти штуки. С дублированием по другому борятся.

    По следующей проблеме - trailing slashes. читаем доку.
    Ответ написан
    Комментировать
  • Как правильно организовать и создать проект на Symfony 3?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Комментировать
  • Оптимизирует ли Symfony/Doctrine запросы к сущности?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    в смысле кеширует ли волшебным образом? нет. Единственная оговорка - если вы это делаете на коллекции и все данные из коллекции уже загружены в память - то тогда да, оно просто посчитает количество объектов, подходящих под критерию (метод matching для фильтрации коллекций). А так... только выборки по первичному ключу в случае если сущность уже загружена.
    Ответ написан
    2 комментария
  • Для каких задач Java лучше подходит, чем С++?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Правда ли, что зная С++ можно быстро перейти на любой ооп язык?


    Относительно быстро, да. В принципе C++ должен дать вам неплохой фундамент.

    Читал, что С++ имеет больше в сравнении с java рычагов управления памятью.


    В Java код выполняется через JVM, со сборщиками мусора и т.д. То есть получить там seg fault или утечку памяти банально сложнее. Это налагает определенный оверхэд, хотя JIT компиляторы генерируют неплохой и довольно эффективный код, так что если брать среднего девелопера на C++ и среднего девелопера на Java - у последнего просто расход на память будет сильно больше, но в целом же в большинстве случаев особой разницы в производительности вы не увидите. Да и не сильно это важно с учетом скорости разработки (что важнее обычно).
    Ответ написан
    2 комментария
  • Doctrine архитектура и построение связей, как правильно?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    философия доктрины - мы проекируем систему исходя из взаимодействия объектов, база данных лишь деталь реализации.

    То есть у нас есть объекты User, UserEmail и UserCode. У объекта User есть поля emails и codes. Иии все. При желании мы можем сделать bidirectional связь и тогда у UserEmail/UserCode появится поле user, которое будет содержать владельца, но как правило это не нужно.
    Ответ написан
    Комментировать
  • Как реализовать ajax запрос в mvc?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Использую mvc модель


    почитайте еще раз что это такое и зачем оно надо.

    Я хочу подгружать текст статьи через ajax,


    Ajax, он же XmlHTTPRequest - это просто API для выполнения HTTP запросов из javascript. С точки зрения бэкэнда (то есть php) - это просто очередной http запрос. То есть никакой разницы.
    Ответ написан
    2 комментария
  • Что отличает freelance программиста от корпоративного?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Проблема как раз таки в том, что нужен опыт командной разработки. То есть если вы фрилансер и вы работаете еще с десятком человек - то это не сильно отличается от "корпоративного" разработчика.

    А по поводу стэка... ну как правило фрилансеры одиночки плохо знают git/hg (commit, push что еще надо), не знакомы с такими вещами как CI, CD, не пишут тесты. А что уж говорить о методологиях разработки, их и "корпоративные разработчики" частенько не понимают.
    Ответ написан
    18 комментариев
  • Как правильно писать названия переменных, функций и тому-подобное?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нижнее подчеркивание у функции убираем и все уже чуть получше.

    В целом же названия надо делать осмысленными. То есть если не знаем как что назвать, просто формулируем что мы хотим сделать (на английском языке), и исходя из этого уже выдумываем названия:

    // calculate sum
    $sum = calculateSum(); 
    // generate report for premium users
    $sum = generateReport(new PremiumUsersSpecification());


    как-то так. Ну а что как, у меня такие правила:

    - константы - SCREAMING_SNAKE_CASE
    - названия объектов - UpperCamelCase
    - названия переменных, методов, функций и т.д. - lowerCamelCase
    - таблички/поля в бд, json, yml - snake_case
    Ответ написан
    Комментировать
  • Как может применяться Object Iterator?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Сначала разбираемся что такое "итератор", потом открываем доку, там в комментариях даже приводят ваш случай в качесве варианта использования. Ну и потом вообще разные виды итераторов смотрим.
    Ответ написан
  • Можно ли использовать инкапсуляцию компонентов в Vue.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    спускайте данные сверху, а не запрашивайте их внутри компонентов, и жизнь станет лучше.
    Ответ написан
  • Ansible. Правильная генерация паролей?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    пароли генерируются, помещаются в inventory или host_vars и хранятся в зашифрованном виде (например при помощи ansible vault). Генерить их при провиженинге машины не очень хорошая идея, хотя иногда удобно.
    Ответ написан
  • Как правильно передать $scope из дочернего контроллера?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как правильно решить данную задачу?


    Не используйте $scope вообще. Вот вообще. Не инджектите его в контроллеры, и тем более в сервисы. Единственное место где это должно быть - link директив, которые работают с DOM (и то для простых проектов даже это не нужно делать, ибо директивы-примитивы вроде ngHide/ngIf покрывают большую часть кейсов).

    Не используйте ngController, вообще. Нынче angular 1.5, используйте компоненты и биндинги. Тогда данная задача решается уже при помощи биндингов, наследования скоупов и т.д.
    Ответ написан
    3 комментария
  • Как правильно реализовать счётчик непрочитанных сообщений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    для начала определитесь с определением "прочитанное сообщение". Когда оно должно считаться прочитанным. А там далее уже делайте.

    p.s. не unreadCount а countUnread, так оно как-то приятнее звучит.
    Ответ написан
    Комментировать
  • Как получить значение текущего изменяемого элемента массива?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Время рефакторинга!


    $scope._url = "";
    $scope._login = "";
    $scope._password = "";


    Вы же знаете что есть controllerAs который рекомендуется использовать согласно angular styleguide и всем остальным существующим бест практис? (объяснение чем черевато не использовать оное читать в том же angular-styleguide).

    $scope.sortFunc = function (a, b) {
        if (a.id> b.id) {
          return 1;
        }
        if (a.id< b.id) {
          return -1;
        }
        return 0;
      };


    Вы же знаете что в ангуляре есть встроенный фильтр orderBy?

    function AppCtrl(orderByFilter) {
        this.foo = orderByFilter(collection, 'id');
    }



    var inc = 1;

    if(tempArr.length > 0){
    var lastItem = tempArr.last();
    inc = lastItem.id+1;
    }


    вы же знаете что это не гарантирует уникальность, и может вызывать проблемы? Для таких вещей удобнее использовать какую-либо реализацию UUID (CUID например: https://github.com/ericelliott/cuid)

    Ну и да - ватчер вам тут не нужен так как вы точно знаете когда у вас что произошло. И бейте себя по рукам каждый раз как ставите у ватчера true третьим аргументом.
    Ответ написан
    2 комментария
  • Как безопасно выполнить исходный код PHP из строки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) изолировать код в песочнице, передавать в качестве аргументов только то что можно юзать (php.net/manual/en/function.create-function.php)
    2) воспользоваться, например, nick/php-parser и удостовериться что не используются штуки типа global
    Ответ написан
    Комментировать
  • Одинаковые куски кода в разных классах допустимо или нубство?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нубство. Выносите общее в методы, в общие зависимости. Почитайте про DRY.

    Дублирование позволительно если это... ну тупой код и от дублирования никуда не деться. Но у вас тут какие-то выражения, логика, поведение дублируется. А это уже нубство.
    Ответ написан
    3 комментария
  • Чем связать php и java?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    pub/sub на rabbitmq/zeromq/activemq и т.д. Можно конечно RPC организовать но...
    Ответ написан