Ответы пользователя по тегу PHP
  • Что можно использовать от фреймворка в DDD?

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

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

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

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

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

    Где вместо partner.ru необходимо подставить свой домен, который ведет на ваше приложение, где реализован указанный метод.
    Это вы сделали?
    Ответ написан
  • Как правильно отобразить сообщение на странице?

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

    @k2lhu
    Добавление error вам подойдет?
    this.login = function(){
        var values = $('#updateForm').serialize();
            $.ajax('/?module=members&media=ajax&action=login',{
                type: "POST",
                data: values,
                success: function(data) {
                    toastr.success(data);
                }
                error: function () {
                    console.log('сработала обработка ошибки');
                }
        });
    };


    UPD: дополнительно можете проверять какое либо поле на соответствие ожидаемому результату
    var dialogName = $('#user').html();
            console.log(dialogName);
            $.ajax ({
                url: '/chat/dialog',
                data: {dialogName: dialogName},
                type: 'GET',
                success: function (res) {
                    if(res==1) {'такая то ошибка'} и т.д.
                    
                },
                error: function () {
                    console.log('сработала обработка ошибки');
                }
            });
        }

    т.е. в ответе мы можем ожидать какой идентификатор, который укажет что именно ошибка произошла.
    Ответ написан
    4 комментария
  • Не работают Get параметры в MVC?

    @k2lhu
    Не используйте данный пример в реальных сайтах, уже не первый раз сталкиваюсь с этим кодом )
    А не срабатывает путь по простой причине - если вы действительно сами делали сайт, то должны знать что происходит в get параметрами, приведу пример как раз с вашего сайта, у вас есть страничка по адресу site/product/43 , для того чтобы вообще зайти на нее вы в site/config/routes.php добавили правило,
    'product/([0-9]+)' => 'product/view/$1'
    Левая часть - то что отражается у вас в адресной строке, правая часть - что это вообще на самом деле, ваш класс роутера получает часть что слева, затем начинает перебирать файл с вашими роутами(путями), и так как у вас сразу настроено чпу то только такой вид и будет работать. И получив от вас в строке указанный вами путь с параметрами - он в списке путей не находит подходящего правила и выкидывает исключение.
    Ответ написан
    3 комментария
  • Как выбрать из базы данных строки с последними изменениеми товаров?

    @k2lhu
    Воспользуйтесь сортировкой по убыванию - ORDER BY `field` DESC
    Как пример:
    SELECT * FROM `paylistservice` ORDER BY `paylistservice_time` DESC;

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

    @k2lhu
    Загуглите самое простое решение - redmine, удобно, просто, диаграмма Ганта присутствует.
    Там спокойно и управляете своими задачами.
    А процесс с перетаскиванием папок - не проще тогда в блокнотике карандашиком чиркать? :)
    Ответ написан
    Комментировать
  • Как сделать вывод новостей через TPL?

    @k2lhu
    Все правильно, используйте цикл для вывода записей к примеру for:
    {% for user in users %}
    {{ user.username|e }}
    {% endfor %}


    Просто так вам новости все сразу не выведутся, это же общание к массиву идут, еще есть смысл проверить массив, распечатайте его var_dump() либо print_r():
    var_dump($a);
    Посмотрите что в него попадает.
    А то как вы хотите распечатать выведет только одну запись :)

    Еще хотел бы добавить - используйте PDO или mysqli для работы с БД. Забудьте про mysql в срочном порядке.
    Ответ написан
    4 комментария