• Веб приложение на Symfony Components, как правильно?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Разделить приложение по паттерну MVC,


    Ваш MVC плавно превращается в MVA, а MVA плавно превращается в луковую архитектуру.

    и слоя такого как модель нет

    Потому что модель это не слой, это объект. Один одинешенек (в контексте одного реквеста) такой... его задача взять запрос и выплюнуть данные. То есть для контроллера модель это сервис, для шаблона модель это... сущности или DTO.

    Модель это ВСЕ ЧТО УГОДНО что умеет обрабатывать данные и содержит их.

    Symfony же это UI фреймворк, который всего-лишь позволяет вам быстро организовать UI к вашему приложению (HTTP API или CLI скрипты это только UI приложения) и потому как именно вы будете организовывать архитектуру приложения - это чисто ваша забота. Симфони вам предоставляет только контейнер зависимостей что бы организовать сервисный слой удобненько.

    MVC это бесполезные три буквы которые не говорят ровным счетом ничего о том как у вас чего организуется. MVA уже лучше и это именно то что использует подавляющее большиинство на бэкэнде последние лет 10 (в том числе и RoR), но концепция та же - разделение логики представления данных от логики обработки этих данных.

    Тогда как поступить с этим? Есть компонент форм для валидации данных и заполнения полей авторизации-регистрации, есть ORM а как мне связать и валидацию и записи через ORM в объект User допустим.


    Вам как правильно сделать или как удобно? Как удобно зависит от вас. Вы можете и писать из форм прямо в сущности анемичные и т.д. и еще как хотите. Но по сути флоу должен быть примерно таким:

    компонент форм пишет данные в DTO (тупые контейнеры данных). DTO идут в сервисный слой где данные мэпятся на сущность. Сущности (у нас же это пропел)... по правилоному за их сохранноть должны отвечать репозитории, а внутри уже что угодно используйте, но раз уж у нас active record то все что мы можем тут сделать - просто вызвать save в сервисах либо страдать (доктрина в этом плане намного удобнее но у нее есть свои проблемы, а так же она сложная).

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

    Так же рекомендую почитать вот эту штуку: The Twelve Factors
    Ответ написан
    Комментировать
  • Как при клике на кнопку в массив вставить эл из Input?

    mannaro
    @mannaro Куратор тега JavaScript
    Умею профессионально гуглить
    Может, я не понял что значит "ожномю" или какой "эл" вы хотите вставить туда, но все работает как надо:
    jsfiddle.net/s1wnf7v1
    Ответ написан
    2 комментария
  • Обвернуть в span последние 3 цифры цены?

    Hatsune-Miku
    @Hatsune-Miku
    Няшк :3
    <span class="PricebasePriceWithTax">57 <span style="font-size: 0,9;">000</span> p</span>
    Ответ написан
    Комментировать
  • Что необходимо для современного веб-фреймворка?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    О блин, первый ответ меня убил. Каких еще умных слов напишут full-stack mega developers & super duper architectors, that have billion salary about that're using a lot of intellectual words.

    Но опять же - вам куда? Я на своем уровне являюсь автомехаником, который пытается делать меньше, а чтобы работало дольше. И конечно, чтобы когда мне надоест, я мог любого, даже новичка нанять, и он посмотрев сутки понял - что тут и куда. И на выходе обычный сайт получится - который легко дорабатывается, и ломается на кусочки если надо.

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

    Что до того, что начинать с CI глупо - тут да, они делали что-то очень простое но и в нем умудрились перемудрить. 10 конфиг файлов забитых какими-то редко-используемыми настройками уже о многом говорит.

    Мне лично в фреймворке нужны:
    ** Простой роутинг - регулярки, в него сразу вкинуть обработку языков и обратную генерацию ссылок. Честно мне редко нужны были роуты в файле - я их всегда в базу перетаскивал, страницы создавать легче было в навикате, чем постоянно редактируя сначала роуты, потом контроллеры, потом создавая действия....
    ** Под этот роутинг разработанная исходная БД с языками (локалями), страницами (с путями к видам) и сессиями пользователей
    ** Вместо экшенов и контроллеров оставить одни только контроллеры, которые просто могут вкладываться друг в друга неограниченное число раз. Не забыть, что контроллеры нужна возможность хранить в разных файлах, в любой структуре папок
    ** Понятная система работы с БД и генерация кода моделей. Причем таким образом, чтобы генерировалась "исходная модель", а новую ты создавал на базе исходной, чтобы твои изменения каждый раз не затирались. Идеальная модель - это массив с заранее вбитыми в нее полями и дефолтными значениями. Обычный себе PHP массив. Главное, чтобы при выводе и работе с ним тебе не нужно сначала делать его массивом, чтобы просто удобно его просматривать.
    ** Есть такая практика - всю работу с моделью засовывать в модель. Ничего не могу сказать. Но для каждого модуля на сайте у меня всегда были собственные сообщения об ошибках. Поэтому реализовывать единую систему "валидации данных в модели", и потом сражаться с топорным:
    Система сообщает:
    1) Имя пользователя должно быть 1-30 символов
    2) Имя пользователя не может содержать...

    Зачем? Ошибки пишутся в самом модуле - если это модуль авторизации - напишите, что "Авторизация не удалась, введите так-то".
    ** При поиске с БД не забыть что иногда нужны а) связи и б) вложенные условия, соединяемые через И/ИЛИ
    **
    ** Побольше разных наследований (в языках например - когда есть язык по умолчанию и есть несколько уровней на которых человек язык может выбрать - куки, база данных, программно-установленный, выбранный на сайте или введенный в адресную строку)
    ** Языки достаточно хранить в одном файле для каждого языка разделяя их через cat__lang и в формате json, чтобы легко подгружались из JS
    ** Модульность - это чтобы была возможность готовые библиотеки подключать быстро и легко, соответственно и писать их запросто
    ** Готовая авторизация (которая к слову занимает один файл в 200 строк, а не как у многих - сессии свои напишут, какие-то флеш сообщения напишут, "стэйты", а по итогу регистрацию все равно заново пиши)
    ** Ну при хороших раскладах конечно приятно иметь еще миграции всякие, для совсем уж крупных проектов, где базу удалить и закачать заново - работа двух дней

    На что наплевать:
    Комьюнити? В попу комьюнити. У вашего комьюнити каждый раз надо выпросить (читай - высосать, ублажить) желание помочь, ну или ждать по неделе, пока соблаговолите слезть со своих башен). О у меня даже было, один такой комьюнити-бой сказал - "я говорит, тебе не помогу, потому что мне не нравятся твои взгляды." Он полчаса учил меня жить, а в конце сказал, что у него нету 5 минут, чтобы просто сказать мне как делается то что я просил.

    Документация? Ну как бы и да и нет. Если у тебя ф-ворк простой как бутылка - не надо писать эти километры и стены текста - кроме дрочева на них тех людей, кто любит все изучить и знать - толку не будет. На ф-ворке должны делаться простые операции, все остальное создается под заказ.

    Встраивание в код всяких библиотек - бутстрапов разных, типа популярных, ангуляров и тд - в жопу. Кто хочет - добавит.

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

    Идеальное бизнес-направление работы, это когда твоя система позволит новичкам быть такими же умными, как и профессионалы, потому что будет очень простая. И на этой системе всегда можно будет сделать чудеса, не обязательно за 5 минут, но используя те инструменты, что есть.

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

    Just, be simple.
    Ответ написан
    Комментировать
  • Как сделать консольный логгер nodejs таким же удобным как браузерный?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Найдите node-inspector на npm, он позволяет вести отладку node.js процесса из любого webkit+v8 браузера (Chrome, Opera)
    Ответ написан
    2 комментария
  • Как сверстать волнообразный бордер?

    27cm
    @27cm
    TODO: Написать статус
    Никак. Разве что вступить в W3C и реанимировать идею border-style: wave;
    Ответ написан
    Комментировать
  • ::after Появляется после текста в div а не после div - так и должно быть?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    The ':before' and ':after' pseudo-elements can be used to insert generated content before or after an element's content. They are explained in the section on generated text.
    Спецификация

    ведь указано что он блочный элемент

    То, что это блочный элемент, вовсе не значит, что он по каким-то причинам должен рендериться вне родителя. Это влияет только на его взаимотношение с соседними элементами.

    А что касается вашего кода, у вас для after ширина дважды указана: 100% и 1400px. Не знаю, специально это или нет.

    P.S. В будущем постарайтесь более подробно описывать, что именно странного вы видите в поведении элемента, я не сразу сообразил о чем вы говорите.
    Ответ написан
    Комментировать
  • Как эффективно изучать php?

    Если честно, то по мне, самое лучшее это практика решения реальных задач (проектов). Сам когда то изучал PHP по книгам и задачникам, но после решения их, через неделю забывал уже что да как. И вот когда сам себе придумал проект и начал его делать, то навыки PHP сразу пошли в гору, и самое главное на реальном проекте листинг запоминается лучше.
    Для начало, самое простое, это возьми паттерн MVC и разбери как он работает и напиши самый простой сайт-визитку на нем. Ну а дальше уже я думаю сам поймешь куда продвигаться.
    Ответ написан
    1 комментарий
  • Тестирую сайт на localhost, загружаю Gif анимацию, почему не проигрывает, а открывает как картинку?

    EnterSandman
    @EnterSandman
    Эникей
    Что вы загружаете? Как вы загружаете? ПЖЛСТ!!!!
    Ответ написан
    Комментировать
  • Как правильно сверстать?

    miraage
    @miraage
    Старый прогер
    manos.malihu.gr/jquery-custom-content-scroller

    Там есть ссылка demo.
    Ответ написан
    Комментировать
  • Как избавиться от косяка с именами node_modules?

    alexofree
    @alexofree
    ИМХО - проще перейти на линукс. Проблема с именами в самой винде.
    Либо воспользоваться попробовать воспользоваться символьными ссылками, но не уверен, что поможет.
    Ответ написан
    5 комментариев
  • В чем смысл PostCSS сегодня?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В последнее время началась мода на PostCSS - много постов, статей о нем.

    А почему бы и да? Любые инструменты надо пиарить что бы народ ими пользовался. Ибо народ будет пользоваться тем что на слуху (ну или тем с чем привык работать). Больше народа - больше идей, быстрее идет развитие, формируется комьюнити и поддерживать решение становится чуть проще. Да и приятно это когда твои наработки используют.

    Есть даже версия (не без оснований), что это - прародитель всех современных препроцессоров и веяний.

    Где ж это вы такое прочитали? postcss был попыткой решить проблемы, которые нельзя решить препроцессорами (или можно но долго).

    Окей, будем считать так, тем паче, что история коммитов на Гите это скорее подтверждает.

    Что именно подтверждает? сначала был Sass написанный рубистами что бы CSS можно было бы готовить так же нежно как они готовят HTML на HAML (кофескрипт туда же, рубистам хотелось сделать js похожим на ruby). И это заметте было в 2006-ом году! тогда и js был медленный, и V8 может только в планах был...

    Ведь все, что умеет PostCSS, умеют и препроцессоры

    postcss из коробки не умеет ровным счетом ничего. Он может только загрузить AST CSS файла и слепить из него обратно тот же CSS.

    И именно в этом сила postcss - модульность. Все существующие препроцессоры монолитны. То есть вы не можете просто так взять и добавить что-то свое туда. Да, в последних версиях less (и вроде как sass туда же подтягивается) у вас есть примитивный набор средств что бы вклиниться в процесс обработки AST документа и добавить какие-то примитивные вещи. Но это не удобно. Если вы хотите динамически менять проперти (например пересчитывать rem в em) или добавлять еще (опять же для того что бы руками не плодить в css кастыли для разных браузеров и делать это автоматом, на завязываясь ни на миксины и оставляя CSS чистым) свойств, но сделать это на less/sass сложно.

    Намного проще взять postcss и натравить это дело на результат работы препроцессоров.

    Давайте придумаем пример того, что можно легко и просто сделать при помощи пост процессоров и что сложно сделать с препроцессорами. Самое первое что приходит в голову - инлайнинг ресурсов. Например мелкие png-ки. Или работа с относительными путями, ресолвинг оных точнее. В этом случае мы с postcss напишем маленькую функцию, которая пробежится по всему абстрактному синтаксическому дереву и найдет использование url(). далее мы можем проверить размеры картинки и заинлайнить их (если у них размер достаточно маленький). Или собрать список всех задействованных картинок и использовать их потом (например что бы скопировать только то, что мы реально используем).

    Вот как-то так. А за счет того что мы имеем доступ целиком и полностью к формированию и обработке AST мы можем и синтаксис CSS развивать. Примерами могут служить многочисленные плагины аля cssnext и т.п. Можно даже большую часть фич sass в виде плагинов подключить.

    А самое забавное, что работает это все быстрее того же libsass на плюсах. За счет архитектуры (имею в виду не голый postcss а с набором плагинов добавляющих функциональность sass).
    Ответ написан
    Комментировать
  • Как правильно подготовиться до уровня Junior PHP?

    zualex
    @zualex
    Senior Software Engineer
    Для начала PHP: Правильный путь - очень много полезной информации как для начинающего, так и для опытного программиста.
    А потом уже фреймворки, да без них сейчас никуда
    Ответ написан
    Комментировать
  • ООП в высоконагруженных проектах считается устаревшим?

    miraage
    @miraage
    Старый прогер
    Мужик дегенерат, однозначно.

    // EDIT

    Посмотрел прикрепленные исходники. Закапал святую воду в глаза.
    Выкиньте это всё, покажите ему, например, PHP: The Right Way.

    Я бы на Вашем месте уволился, незадумываясь.
    Ответ написан
    Комментировать
  • Надежна ли функция is_array?

    Melkij
    @Melkij
    PostgreSQL DBA
    На примере PHP5.6.14
    ext/standard/type.c PHP_FUNCTION(is_array) вызывает php_is_type (функция определена там же, чуть выше)
    Та проверяет на равенство Z_TYPE_PP(arg).
    Z_TYPE_PP, соответственно, макрос из Zend/zend_operators.h
    #define Z_TYPE(zval)		(zval).type
    #define Z_TYPE_P(zval_p)	Z_TYPE(*zval_p)
    #define Z_TYPE_PP(zval_pp)	Z_TYPE(**zval_pp)

    Как видим, прямое обращение к полю type базовой для zend'а структуры zval. Ну а уж оно врать не может, это или IS_ARRAY и is_array даст true или что-то другое и результатом будет false.
    Ответ написан
    Комментировать
  • Почему Angular плохой?

    @VanKrock
    Angular всего лишь инструмент, если вы умеете им пользоваться и он решает ваши задачи, используйте его, если нет используйте другой инструмент. На Angular достаточно просто решать большой пул задач, если вы будете постоянно только сравнивать инструменты и искать который лучше, то в итоге вместо проекта вы все еще будете искать инструмент, который лучше.
    Ответ написан
    4 комментария
  • В каких случаях нужно нанимать дизайнера сайтов?

    vaux
    @vaux
    Курящий лыжник
    Хороший дизайн помогает человеку решить его проблему. На входе мы имеем человека и его проблему. Человек находит сайт компании, которая, как он считает, может его проблему решить. Далее, путем работы с сайтом, человек либо решат свою проблему, либо уходит на другой сайт, где путь от захода на сайт до решения проблемы гораздо короче и понятнее. Так вот, хороший дизайн - это когда процент людей, решивших свои проблемы с помощью данного конкретного сайта, стремится к 100.

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

    Что же касается вашего вопроса, то тут всё зависит от того, как вы понимаете работу дизайнера. Если для вас это человек, который умеет рисовать красивые макеты, то, наверное, можно и не нанимать отдельного человека. Только хуже будет, поскольку вы не поймете друг друга. Если же для вас дизайн - это в первую очередь инструмент решения проблем людей, то нанимать дизайнера стоит. Единственное, что это должен быть именно дизайнер, а не просто рисовальщик красивых картинок.
    Ответ написан
    4 комментария
  • Где посоветуете учиться начинающему FrontEnd-разработчику?

    bodia7
    @bodia7
    Начинающий веб-разработчик
    скачайте курсы учебного центра "Специалист". очень доходчиво объясняют
    Ответ написан
    1 комментарий
  • Как автоматизировать автоматизацию во front-end?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    я папку node_modules симлинком подключаю в проект
    20150917-153845.png
    сам проект инициализирую yo генератором
    пара минут и все готово.
    Ответ написан
    Комментировать