• Где правильно выполнить динамическую проверку, например, для выбора метода оплаты, используя laravel контракт и инъекцию зависимостей?

    @k2lhu
    Делать в реальном проекте так точно не рекомендуется.
    То что вы приводите в виде примера - это размазывание бизнес логики между всеми слоями приложения.
    Все что вам нужно, это какой-то класс PaymentFactory, который будет иметь метод make(string $credit), у которого аргумент $credit и будет принимать значения credit/bank/null и на основании переданного аргумента будет возвращать правильный объект класса обработчика конкретного метода оплаты. И уже этот PaymentFactory можете вызывать через DI.
    Однако эту задачу можно решить через паттерн стратегия, тоже хорошо подойдет для удобной организации кода.
    Ответ написан
    1 комментарий
  • Как идеально построено взаимодействие между фронтэнд и бэкэнд разработчиками?

    @k2lhu
    Полагаю вам нужен Swagger, пример как это выглядит в работе тут.
    Перед написание кода вы можете описать весь набор данных и их формат для обмена между бэкендом и фронтендом, и только после оформления доки приступать к работе, в этом случае бэкенду не нужен фронт, он может ориентироваться на описанную документацию сваггера, так же как и фронтед.
    Ответ написан
    4 комментария
  • Что можно использовать от фреймворка в DDD?

    @k2lhu
    При работе с Yii2 изначально стоит выносить любые компоненты в обертки, и их использовать по проекту, так вы легко сможете отвязаться от реализации, используя интерфейс обертки.

    Что касается DDD при работе с Yii2 и моделей - идеально было бы разделить приложение на различные слои, полностью отделив из средних слоев любые зависимости Yii2, но модели я бы не стал наделять интерфейсом, в этом плане вам поможет создание своего репозитория, в котором можете спрятать любые методы на выборки при помощи юшных моделей, а наружу отдавать уже самостоятельно смапленные Entity и уже их наделять интерфейсами и использовать дальше, но это именно для выборок конкретных записей. Если вам необходимо выбрать несколько записей - почти аналогично используюте Entity, создаете свою кастомную коллекцию которая имплементирует встроенные интерфейсы Iterator и Countable. Для их разделения можно использовать базовый класс как родителя, а дальше создавать нужный класс коллекции для смапленных Entity.

    Но вся ваша идеальная задумка DDD с Yii2 легко развалится при использовании ActiveRecord и базовых моделей - в них сразу пихается и валидация, и каст, и обработка поведений на сохранение/обновление/удаление, так еще в старых проектах еще и триггеры навешивают часто. Может стоит подумать, нужен ли вам вообще тут DDD? Если это сделано с целью отвязаться от фреймворка в любой момент - то используйте для моделей Entity, Collection и выносите сразу все в репозиторий, легко сможете мигрироваться на тот же симфони. Безболезненного перехода не бывает и так или иначе что-то да придется переписывать, но все сможете это сделать просто поменяв код ваших репозиториев и контроллеров с реквестами.
    Ответ написан
    1 комментарий
  • Как в Laravel пересобрать webpack у библиотеки из vendor или как разрешить несовместимость версий?

    @k2lhu
    Почти у любого пакета под laravel есть основной файл пакета ServiceProvider, в котором указывается где искать view файлы, js,css, подключение фасадов и компонент. Скорее всего при установке этого пакеты вы у себя даже добавляли подключение нового ServiceProvider в список всех провайдеров. И возможно будет достаточно отнаследоваться от базового класса ServiceProvider внутри пакета, подключить свой отнаследованный класс вместо предлагаемого разработчиком и внести необходимые изменения в уже свой провайдер, поменяв необходимые зависимости.
    Ответ написан
    Комментировать
  • Как подключить оплату Телеграм Бота к Free-Kassa?

    @k2lhu
    Вот ссылка на готовый пакет для работы с фрикассой, в ридми все максимально понятно и просто с примерами расписано, остается только воткнуть в код вашего бота.
    Ответ написан
    Комментировать
  • При тестировании стоит ли создавать пользователя в каждом тестовом методе, или существует более правильный подход?

    @k2lhu
    Каждый тест должен проверять что-то одно, поэтому для проверки разных групп пользователей вы можете их заранее загрузить как вам угодно в методе
    public function _before() {}
    А сейчас у вас в тесте происходит и создание пользователя и выполнение POST-запроса на его получение его прав к чему-либо.
    В тесте на проверку прав пользователя не должна падать ошибка создания пользователя, а сейчас у вас такая возможность зафейлить это дело есть.
    Чем проще и короче тест - тем лучше и проще их писать, тем проще будет дописывать в дальнешем уже проверку какой-то логики вокруг базовых действия, в том числе и создания юзеров и проверки прав доступа.
    Ответ написан
  • Почему Yii2 REAST api принимает json тестируя через postman, но видит лишь пустой массив когда отправляю REST api c json с php-файла?

    @k2lhu
    Попробуйте $content = Yii::$app->request->rawBody;
    Ответ написан
    Комментировать
  • Почему вылетает ошибка "колонка не найдена в таблице бд"?

    @k2lhu
    Если у вас название первичного ключа отличается от id, то необходимо явно указать все свои ключи в классе модели:
    public static function primaryKey()
    {
        return ["id_faq"];
    }
    Ответ написан
  • Как принять данные post с эватора на php?

    @k2lhu
    Непонятно зачем вы вообще используете тут curl, в документации четко написано -
    После оплаты отправляет чек в сторонний сервис. Тело запроса содержит один или несколько чеков.
    Ожидает от стороннего сервиса ответа 200 ОК. Если ответ не приходит в течение 10 секунд, Облако отправляет уведомление повторно.

    А веб адрес для принятия запроса должен быть таким
    https://partner.ru/api/v2/receipts

    Где вместо partner.ru необходимо подставить свой домен, который ведет на ваше приложение, где реализован указанный метод.
    Это вы сделали?
    Ответ написан
  • Как совместить работу php-роутера (от любого фреймворка) с vue-router?

    @k2lhu
    Тут никаких проблем нет, роутинг на vue спокойно делайте как вам угодно, а для отдельных роутов которые должны быть вызваны непосредственно из zend - просто добавьте правила в ваш конфиг сервера с указанием, что для этих роутов надо использовать не ваш js индексный файл, а указываете путь к местоположению паблик index.php для zend.

    И все таки не совсем понятно зачем конкретно в вашей ситуации разделять, я понимаю в этом есть смысл когда необходимо ловить колбэки от какой-то платежки/апишки, но для простого интернет магазина хватит только vue роутера.
    Ответ написан
    Комментировать
  • Как сделать на сайте интеллектуальный поиск?

    @k2lhu
    Предлагаю посмотреть на elasticsearch, индексируете все товары и можете получать результаты даже с неправильно введенными фразами используя нечеткий поиск
    Ответ написан
  • Как сделать динамическую смену почтового драйвера?

    @k2lhu
    Я предлагаю вам сделать ваши драйверы как компоненты системы, при добавлении нового драйвера оборачиваете его в класс обертку, все необходимые классы цепляете к самому приложению, и вызываете тот, который подойдет в нужной ситуации, по ссылке найдете всю нужную информацию.
    К тому же можно сделать инциализацию компонент только при их вызове, т.е. при старте приложения они не будут инициализированы, а только в момент вызова.
    Ответ написан
    Комментировать
  • Как исправить General error: 1215 Cannot add foreign key constraint?

    @k2lhu
    Посмотрите что в базе представляет из себя колонка id в таблице users - bigint(20), unsigned
    В таблице socialites перед тем, как вешать внешний ключ, приведите в порядок user_id
    $table->unsignedBigInteger('user_id')->nullable(false);
    Ответ написан
    1 комментарий
  • Как правильно написать валидацию для формы?

    @k2lhu
    Используйте MessageBag для хранения ошибок валидации. Вот пример.
    Ответ написан
    Комментировать
  • Как можно закрыть сайт от роскомнадзора?

    @k2lhu
    Оставьте пожалуйста свой телеграмм аккаунт - я вам напишу.
    Ответ написан
    5 комментариев
  • Почему laravel говорит, что не существует контроллера?

    @k2lhu
    Если не ошиблись в названии роута, проверьте его название у себя в роутах.
    Ответ написан
    Комментировать
  • Можно ли создать нормальный сайт без фреймворков?

    @k2lhu
    Конечно можно, фреймворки нужны для быстрой разработки, как писал вышел Дмитрий - самое главное это сетка и медиа запросы.
    Также, мне как backend программисту не очень нравится возиться с версткой, я берут бутстрап, и без знания как спозиционировать тот или иной элемент работаю просто с сеткой и не заморачиваюсь.
    Ответ написан
    Комментировать
  • Телеграмм Бот, есть ли пошаговое создание на PHP или Node JS?

    @k2lhu
    Если смотрели видео - то должны были понять, что есть два способа работы с ним:
    1) - Забирать все данные вручную
    2) - Привязать webhook на свой домен

    Таким образом по вашим пунктам - для начала вам надо гуглить как сделать webhook на свою страницу, в описании к api телеграмма все есть.
    Для второго пункта - вам необходимо выполнить первый пункт и собрать пользователей работающих с ботом в базу, а затем выбрать администраторов, либо сделать для них команду что-то вроде /setAdmin и выдавать администраторам одноразовый ключ для активации прав администратора.
    Как сделать кнопка - вот хорошая статья
    Отправка картинок и любого содержимого - все есть в описании api.
    Ответ написан
    3 комментария
  • Как правильно отобразить сообщение на странице?

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

    @k2lhu
    Первое что пришло в голову - вынести все в отдельный виджет, сделать папочку components (или любую другую как вам удобнее), и в ней просто сделать свой виджет.
    А затем уже его цеплять на необходимых страницах.
    Ведь ваш собственный виджет может без проблем использовать собственные контроллеры и представления, и точно так же и как и любой экшн отдавать на отрисовку представление.
    Единожды описав виджет, вы просто подцепляете его везде где надо, примерно так
    <?= \app\components\NewsWidget::widget(['param' => 'index']) ?>

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

    Вариант номер 2 - если у вас много повторяющего кода, вынесите его в модель, и вызывайте его как событие перед рендерингом страницы, т.е. грубо говоря своеобразная middleware. Думаю тут необходимо будет дополнительно почитать про поведение.
    Ответ написан