• Где проверить знания по php?

    Denormalization
    @Denormalization
    У upwork куча тестов по языкам. Стоит глянуть.
    Ответ написан
    2 комментария
  • Какой смысл в использовании шаблонизаторов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Шаблонизатор шаблонизатору рознь. Но в целом следует выделить общие задачи. которые должны решать за вас шаблонизаторы. С blade не работал и не вижу смысла есть есть twig.

    Безопасность. Это пожалуй можно поднять на верх. Типичная картина в шаблонах на php - <?= $someUserInput; ?>. Частенько это можно встретить в выводе инпутов, при формировании ошибок поиска (мол "по запросу $userInput ничего не найдено. То есть вставляем в инпут подключение наших js скриптиков, если это форма поиска - делимся с "другом" и забираем его сессию. Ну или еще какие забавные штуки можно делать. А ведь все очень просто решается. Ставим какую-то функцию, которая по умолчанию будет фильтровать XSS инъекции при выводе, и не будет этого делать только если мы попросим. Если писать просто на php - появляются отвратные функции, которые можно просто забыть вызвать. А с шаблонизаторами мы пишем красивые {{ someUserInput }} и можем спать спокойно.

    Помогают соблюдать принцип DRY. Современные средства шаблонизации (twig например), предоставляют вам возможность разделять шаблоны на блоки, переиспользовать их несколько раз, выделять макросы, наследовать шаблоны... словом все что угодно. лишь бы вы могли реюзать куски html а не копипастить их.

    Ограничивают полет фантазии разработчика. Далеко не новость что разработчики ленивые засранцы. Особенно молодые. Если им в шаблоне внезапно понадобились какие-то данные из БД, или данные связанные с запросом, большинство не будет париться и зафигачит нужный код прямо в темплейте. Так же некоторые грешат тем что часть бизнес логики размазывают по шаблонам. Так же встречал проекты отданные на суппорт, где чуваки в шаблонах разбирали через xpath ответы от сторонней апишки (которая использовалась вместо базы данных. То есть это дело было размазано по всему проекту). Рефакторинг в случае изменения апишки будет болью.

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

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

    Так как за все эти приятные вещи мы по сути ничего не платим (шаблонизатор должен компилировать все это в нативный php так что оверхэда просто не будет), почему бы не пользоваться?
    Ответ написан
    1 комментарий
  • Какая реальная цена frontend разработки?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Для оценки чего угодно нужно знать, о чём идёт речь. Потому что
    В общей сложности не больше 5 страниц, с не более 2-3 формами на странице

    звучит слишком абстрактно и на это можно потратить как 20 часов, так и 80 часов. Как я понимаю, суть вовсе не в вёрстке (хотя нагадить можно везде) — интересует именно фронтенд.

    А пока это можно представить в виде диалога с таксистом:
    — Мне нужно проехать примерно 10 километров и отвезти 5 вещей
    — Что за вещи?
    — Ну обычные, какие в магазине продаются
    — А куда едем?
    — Сначала на почту, а там посмотрим. Так сколько возьмёшь?
    — А сколько дашь?
    Ответ написан
    Комментировать
  • SQL запрос из 3 таблиц по 2-м связующим - возможно ли такое?

    @bobzer
    Java EE Developer
    Добавлю немного магии к ответу AMar4enko:

    SELECT books.title,
    GROUP_CONCAT(distinct CONCAT(authors.surname, ' ', authors.name) SEPARATOR ', ') as autors,
    GROUP_CONCAT(distinct topics.title ORDER BY topics.title ASC SEPARATOR ', ') as titles
    FROM books
    LEFT JOIN book_author ON book_author.book_id = books.id
    LEFT JOIN book_topic ON book_topic.book_id = books.id
    LEFT JOIN authors ON book_author.author_id = authors.id
    LEFT JOIN topics ON book_topic.topic_id = topics.id
    group by books.id


    Этот SQL-запрос решает проблему дублирования книг при нескольких авторах и нескольких рубриках
    Ответ написан
    1 комментарий
  • SQL запрос из 3 таблиц по 2-м связующим - возможно ли такое?

    AMar4enko
    @AMar4enko
    SELECT books.*, topics.id as topic_id, topics.title as author_title, authors.id as author_id, authors.name as author_name FROM books
    LEFT JOIN book_author ON book_author.book_id = books.id
    LEFT JOIN book_topic ON book_topic.book_id = books.id
    LEFT JOIN authors ON book_author.author_id = authors.id
    LEFT JOIN topics ON book_topic.topic_id = topics.id

    Только учтите, что при двух авторах и трех рубриках в одной книге вы получите 6 результирующих строк.
    Ответ написан
    Комментировать
  • Стоит ли еще раз проверять данные из формы на сервере, если ее уже проверил javascript на клиентской стороне?

    viktorvsk
    @viktorvsk
    Проверка у клиента - для удобства клиента
    Проверка на сервере - для безопасности клиентов
    Ответ написан
    Комментировать
  • Стоит ли еще раз проверять данные из формы на сервере, если ее уже проверил javascript на клиентской стороне?

    deadbyelpy
    @deadbyelpy
    веб-шмеб
    Проверяют и на клиенте и на сервере.
    Доверять только проверке на клиенте нельзя, т.к. можно отправить невалидные данные и без браузера, вопрос только в том, что будет после получения неверных данных.
    Ответ написан
    Комментировать