• Как обработать ответ платежной системы?

    @FanatPHP
    Чебуратор тега PHP
    Короче это секретный сайт, но ты вроде нормальный пацан, я тебе дам тайную ссылку.
    Прикинь, в интернете есть сайт где есть ответы на все вопросы.
    Зуб даю. Вот твой например
    Ответ написан
  • Как настроить авторизацию в MVC PHP?

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

    Надо на пару лет забыть про красивые слова OOP и MVC, и поучиться просто писать код, который делает то, что требуется.
    Ответ написан
  • Лучшие практики разработки ecomm проектов?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Тут нет лучшего решения или лучших практик. И быть не может. E-commerce отталкивается от потребностей бизнеса и аудитории и бывает настолько разный что обычные интернет-магазины становятся просто каплей а море, а решений на рынке на любой вкус и цвет
    Ответ написан
  • Как вы справляетесь с тупняком в программировании?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Сначала - архитектура,
    потом - кодирование.

    Наоборот - приводит к тупику.
    Ответ написан
  • Правильное ли использование принципов DDD, и чем заменить Repository?

    @dimuska139
    Backend developer
    Вообще-то как раз Repository - это тот слой абстракции, который нужен, чтобы на уровне бизнес-логики (слой сервисов) абстрагироваться от способа хранения данных. То есть, очевидно, нужно использовать Repository.

    Контроллер должен работать только с сервисным слоем. Моделью (Entity) является тот класс, на который вы маппите пользователей, прочитанных из XML-файла. То есть в репозитории надо сделать метод, читающий XML, формирующий коллекцию из Entity (юзеры) и возвращающий ее. На уровне выше (в сервисном слое) надо сделать метод, который как раз вызывает этот метод репозитория. Методы сервиса в свою очередь надо дергать из контроллера, либо из класса консольной команды, если код кроном вызывается. То есть из контроллера дергать репозиторий не принято. А сервисный слой нужен, чтобы в нем держать всю бизнес-логику.
    Ответ написан
  • Как защитить исходный код?

    @FanatPHP
    Чебуратор тега PHP
    Господи, опять очередной защитник.

    Главное плагина ещё нет, покупателей ни одного, языка толком не знает - но уже страдания об упущенной прибыли.

    Варианты есть такие:
    1. Быть чуточку поскромнее. И осознать, что никому твой г-код не нужен, ни за деньги, ни бесплатно.
    2. Быть чуточку адекватнее. И сначала написать код, потом найти покупателей и толкьо потом уже думать о защите.
    3. Расти надо собой и првратиться через несколько лет в человека, который действительно может написать что-то ценное.
    4. после этого уже иметь представление о сервисах работающих через API и не иметь проблема реализовать такой самостоятельно не задавая глупых вопросов на тостере
    Ответ написан
  • CodeIgniter создать точный запрос?

    alams_stoyne
    @alams_stoyne
    Full Stack Developer - #PHP #CSS #JS #DB
    А в самой Базе Данных customer_id имеет тип INT или что-то другое?
    Ответ написан
  • Функционал, потом верстка, или наоборот?

    @WhiteBearDev
    Бэтмэн
    Вариант 1.

    Верстальщику проще сверстать чистый html-код, чем потом разбираться в коде backend-разработчика. Не говоря о наличии сложных ветвлений, которое добавит путаницы и может привести к упущению некоторых веток
    Ответ написан
  • Как научиться писать хороший код, применяя шаблоны проектирования и тд?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Попросили проверить код, на что смотреть нужно?

    Что касается шаблонов - следует быть осторожным, самое худшее, что вы можете сделать - подганять задачу под шаблон.
    Ответ написан
  • Какой PHP-микро-фреймворк взять для простенького REST API с авторизацией, и чтобы не из "большой тройки"?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Может, в редакторе Swagger накидать спеки API и автоматом сгенерить по ним сервер и клиент на любом из предлагаемых языков/фреймворков?

    Например, сервер под теми же Lumen, Slim, Silex, Symfony, Node.js
    Ответ написан
  • Что почитать про правильное проектирование своих приложений?

    @DEugene
    "Чистая архитектура" Роберта Мартина - маст хэв для понимания того как лучше подходить к вопросу разделения приложения на логические слои.
    Ответ написан
  • Что почитать про правильное проектирование своих приложений?

    @Flying
    Думаю что имеет смысл отметить что, безотносительно самого фреймворка как прикладного инструмента, Yii - не лучший кандидат для освоения правильного проектирования своих приложений...

    В целом, если вы хотите получше разобраться в паттернах проектирования - можно брать любую хорошую книжку по этой теме (те же Gang of Four, Мартин Фаулер (на русском) и т.п., предложенная Ярослав ссылка тоже выглядит весьма достойно), изучать, а затем пытаться найти эти паттерны в коде популярных и хорошо написанных проектов.

    Я несколько предвзят, но могу порекомендовать Symfony и Doctrine в качестве отправных точек. К примеру та же Doctrine прямо реализует целый пласт паттернов, описанных Фаулером. Symfony существенно более разнообразна, там можно встретить много различных решений.

    Изучение реализации паттернов в рамках конкретных реализаций позволит вам с одной стороны лучше понять сами паттерны, а с другой - лучше разобраться с тем как изнутри работают довольно сложные проекты, это позволит использовать их самих и, что ещё важнее, заложенные их идеи в вашем собственном коде.
    Ответ написан
  • MVC реализованый через Controller, Entity, Repository, Service это как?

    Нужно отличать элементы паттерна MVC от идеологии DDD.
    Entity, Repository, Service не относятся к MVC.
    Правильно использовать в контроллере вызов Service получаемого через DI.
    Через DI Service получает нужный/нужные Repository.
    Внутри себя при выполнении своей деятельности (обычно метод execute, вызываемый в контроллере с передачей данных извне) Service использует Repository для получения, изменения, удаления Entity.
    Так же Service проверяет данные, выполняет с Entity ДЕЙСТВИЯ СОГЛАСНО БИЗНЕС ЛОГИКИ.
    Repository - это механизм обратится к хранилищу Entity. Хранилище - БД, файл, внешний API.
    Entity - уникальный элемент бизнес логики (пользователь, счет, пост, комментарий, транзакция по счету и т.д.)
    Service возвращает в контроллер результат, который может содержать как Entity, так и Exception или Error.
    В зависимости от результата могут либо выполнятся действия, либо порождаться события.
    Иногда реализация Service делается так, что он порождает события сам.
    Вот на основе результата Service могут выполнятся не бизнес действия, а внешние (логирование, постановку задач, например, отправки письма или пуш уведомления, возврат HTML/JSON/XML, редирект и т.д.)
    Ответ написан
  • MVC реализованый через Controller, Entity, Repository, Service это как?

    gzhegow
    @gzhegow
    Думал, стану умнее, когда адаптируюсь, но нет
    Controller
    -- ProductController
    -- UserController
    spoiler
    ну тут ты все знаешь, это класс где в виде функций хранятся частные случаи твоей программы, или по-русски - страницы сайта. здесь формируется массив исходных данных и разбирается GET/POST/RAW. Здесь прогоняется валидация. И полученный обьект или массив идет дальше в сервис

    Model
    -- Entity
    ---- ProductEntity
    ---- CategoryEntity
    spoiler
    это твоя модель к которой ты привык. Но в ней нету никаких ->save(), ->insert() и так далее. Просто пустой обьект со свойствами и функциями, которые эти свойства позволяют установить и получить. в случае с фреймворками - энтити является прослойкой для ActiveRecord. То есть везде в коде ходят Entity. А у каждой энтити есть внутри AR-обьект (обернуто)

    -- Repository
    ---- ProductRepository
    ---- UserRepository
    spoiler
    это класс, который умеет брать пачку Entity и сохранять их в базу. Или наоборот - запрашивать из базы, отдавая тебе пачку Entity. В простом случае запросы в базу лежат прямо в нем. В чуть более сложном случае он является прослойкой, которая говорит Адаптеру - делай. Говорят что все возможные фильтры и сортировки в виде кусочков, которые можно добавить к построителю запросов тоже хранятся здесь. Соответственно для файлов это придется делать как-то по-другому, у нас ведь нету "запроса к файлу", есть только открыть, перейти на строку или считать целиком

    ---- Adapter
    ------ MysqlAdapter - сохраняет и получает только в базу
    ------ FileAdapter - сохраняет и получает только в файл
    ------ ElasticSearchAdapter - сохраняет и получает только в индекс эластика
    ------ ... и тд
    spoiler
    это кусок репозитория, еще один обьект, который знает КАК ИМЕННО нужно сохранить то, что сохраняет репозиторий. Или как именно получить.

    -- Service
    ---- ProductService
    ---- UserService
    spoiler
    это класс, который умеет делать из входящих, уже проверенных валидатором данных = Entity. На вход кидаешь объект запроса или массив сложный большой, а в нем, под капотом в функциях разбираешь его до тех пор пока не получится массив Entity или одна Entity. В случае с запросом данных, а не их созданием - отсюда вызывается репозиторий, чтобы получить Entity. Когда Entity создан - тут же репозиторий вызывается, чтобы его записать. Сюда же лягут всякие registration() для юзера например, или методы запросов пачки или одной записи с учетом того, что пользователь может захотеть не все поля, или задать сортировку

    View
    spoiler
    тут все ясно. в простом случае - это просто файлик шаблона. в более сложном - класс, который на вход принимает данные от сервиса, на выход отдает их в виде JSON или Хтмл, или Xml (может оборачивать в постраничную навигацию по дороге - но это в каком-то смысле и репозитория задача, когда у тебя постраничная от хранилища зависит), потом программа сделает (new ProductsView($data))->send(); и отдаст их пользователю, проставив заголовки что это там JSON или XML

    Component
    spoiler
    а тут всякие штуки работающие как мини-программы в программе. Авторизация. Языки и переводы. Если совсем ударится в правильность - то этой папки нет, так как каждая мини-программа это по сути сайт с собственной базой данных. И языки тоже могут иметь модель, репозиторий и способы быстро их получать из ElasticSearch


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

    Хочется верить что наступят времена когда вместо "невозможно" начнут применять "интересно, как это возможно" и вместо "да ты гонишь" начнут применять "а не мог бы ты рассказать почему это работает", но за 2000 лет ещё не навоевались.
    Ответ написан
  • Когда стоит писать модули а когда контроллеры?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Модуль нужен, когда у тебя есть кусок логики, который нужно сосредоточить в одном месте, это способ вынести логику, не нагружая ею методы контроллера. Не обязательно городить целый модуль, можно создать сервис-класс, описать однородную логику там и дергать в контроллере его методы.
    Ответ написан
  • Зачем в современном php фреймворки?

    Ну вот вы сами себе противоречите
    плохо не использовать фреймворки в современном php?

    наш микро фреймворк документирован

    Вы просто не взяли для использования что-то уже готовое и известное всем, а написали своё... В итоге новому человеку в команде придется сначала разобраться в Вашем фреймворке и только потом что-то делать. Но не факт что ваше поделие безопаснее и удобнее уже существующего фреймворка, который давно разрабатывается и уже многие "грабли" в нем вытоптаны, а у вашего путь только начался....
    Поэтому
    возьми ларавель и не парься
    вполне мудрое замечание.

    Ну а на Ваш вопрос - Зачем в современном php фреймворки можно ответить очень просто - А зачем Вы в процессе разработки создали свой микрофреймворк?
    Ответ написан