• Ошибка PHP: string-string?

    @Dark_Dante
    Stalker_RED, только лучше делать тернарником
    $возраст =  empty($дата_роджения) ? null : результат_наших_вычислений;
  • Как можно улучшить код отображения даты выпуска новости?

    @Dark_Dante
    Дмитрий, Более того, если будет другой разраб код смотерть, он не будет сидеть с недоуменным видом "А что это, тут собственно происхоит", а столкнувшись с тем же карбоном на других проеках ранее, сходу вкурит - да тут все просто, чел дату локализует. И сможет это быстро поправить, расширить, улучшить, углубить и тд.
  • Приведите пример использования интерфейса, от которого есть польза, как понять что тут нужно использовать интерфейс, а тут не стоит?

    @Dark_Dante
    Nentra, Да. В моем примере mixed - любой тип. Но так делать не рекомендуется, надо явно указать тип возвращемого значения. То так как это просто пример - то можно
  • Как правильно отсортировать JSON в PHP?

    @Dark_Dante
    Александр Андропов,
    $json = '{"event":{"20":{"type":"event","description":"<p>Der Fr&uuml;hling beginnt und die ersten Sonnenstrahlen geben einen Ausblick in den Sommer. Zu diesem Anlass wird in unserer Halle angegrillt. Die Grillsaison wird mit W&uuml;rtchen, Steaks, Salaten und allerlei vom&nbsp;Grill&nbsp;feierlich er&ouml;ffnet.<\/p>\r\n\r\n<p>&nbsp;<\/p>\r\n","title":"Angrillen in der Halle 17 ","location":"Halle 17 ","date":"2023-03-17","time":"18:00 Uhr ","price":"42,80\u20ac Erwachsene 12,90\u20ac Kinder von 6-12 Jahren ","places":0},"19":{"type":"event","description":"<p>Unser allj&auml;hrliches G&auml;nseessen ist zur&uuml;ck!&nbsp;<\/p>\r\n\r\n<p>Eine gem&uuml;tliche Atmosph&auml;re am Ofen, zartes G&auml;nsefleisch und vielleicht ein guter Wein?&nbsp;<\/p>\r\n\r\n<p>Laden Sie Freunde, Verwandte oder&nbsp;Mitarbeiter ein und genie&szlig;en einen k&ouml;stlichen Abend mit hervorragendem Essen.&nbsp;<\/p>\r\n\r\n<p>Buchen Sie gleich Ihren Tisch telefonisch oder per Mail.&nbsp;Die Pl&auml;tze sind begehrt und begrenzt.&nbsp;<\/p>\r\n\r\n<p>Einlass ab 18 Uhr \/\/\/ Essen ab 19 Uhr<\/p>\r\n","title":"G\u00e4nseessen in der Halle 17","location":"Halle 17 ","date":"2022-11-11","time":"19:00 Uhr ","price":"38,00\u20ac Erwachsene 12,90\u20ac Kinder von 6-12 Jahren ","places":0},"21":{"type":"event","title":"\u00e1 la Carte -Sonntag ","location":"Halle 17 ","date":"2022-11-06","time":"12:00 Uhr -20:00 Uhr ","price":"je nach Auswahl ","description":"<p>&quot;Ich k&ouml;nnte mal wieder richtig sch&ouml;n essen gehen.&quot;, &quot;Wir k&ouml;nnten die Familie mal wieder einladen.&quot; oder &quot;Wei&szlig;t du noch beim Martin war es immer so lecker!&quot; - Egal welcher Gedanke Sie zu uns bringt. Wir verw&ouml;hnen Sie mit leckerem,&nbsp;regionalen und frischem Essen,&nbsp;einem warmen Ambiente und unserem typischen Charme. Unsere &aacute; la Carte- Sonntage sind f&uuml;r Jedermann. Hier wird unser Catering zum Restaurantbesuch. Sch&ouml;ne Gespr&auml;che, viel Lachen und erstklassiges Essen rundet auch Ihren Abend ab.&nbsp;<\/p>\r\n","places":0},"22":{"type":"event","title":"\u00e1 la Carte - Sonntage ","location":"Halle 17 ","date":"2022-11-13","time":"12:00 Uhr -20:00 Uhr ","price":"je nach Auswahl ","description":"<p>&quot;Ich k&ouml;nnte mal wieder richtig sch&ouml;n essen gehen.&quot;, &quot;Wir k&ouml;nnten die Familie mal wieder einladen.&quot; oder &quot;Wei&szlig;t du noch beim Martin war es immer so lecker!&quot; - Egal welcher Gedanke Sie zu uns bringt. Wir verw&ouml;hnen Sie mit leckerem,&nbsp;regionalen und frischem Essen,&nbsp;einem warmen Ambiente und unserem typischen Charme. Unsere &aacute; la Carte- Sonntage sind f&uuml;r Jedermann. Hier wird unser Catering zum Restaurantbesuch. Sch&ouml;ne Gespr&auml;che, viel Lachen und erstklassiges Essen rundet auch Ihren Abend ab.&nbsp;<\/p>\r\n","places":0},"23":{"type":"event","title":"\u00e1 la Carte - Sonntage ","location":"Halle 17","date":"2022-11-20","time":"12:00 Uhr -20:00 Uhr ","price":"je nach Auswahl ","description":"<p>&quot;Ich k&ouml;nnte mal wieder richtig sch&ouml;n essen gehen.&quot;, &quot;Wir k&ouml;nnten die Familie mal wieder einladen.&quot; oder &quot;Wei&szlig;t du noch beim Martin war es immer so lecker!&quot; - Egal welcher Gedanke Sie zu uns bringt. Wir verw&ouml;hnen Sie mit leckerem,&nbsp;regionalen und frischem Essen,&nbsp;einem warmen Ambiente und unserem typischen Charme. Unsere &aacute; la Carte- Sonntage sind f&uuml;r Jedermann. Hier wird unser Catering zum Restaurantbesuch. Sch&ouml;ne Gespr&auml;che, viel Lachen und erstklassiges Essen rundet auch Ihren Abend ab.&nbsp;<\/p>\r\n","places":0},"24":{"type":"event","description":"<p>&quot;Ich k&ouml;nnte mal wieder richtig sch&ouml;n essen gehen.&quot;, &quot;Wir k&ouml;nnten die Familie mal wieder einladen.&quot; oder &quot;Wei&szlig;t du noch beim Martin war es immer so lecker!&quot; - Egal welcher Gedanke Sie zu uns bringt. Wir verw&ouml;hnen Sie mit leckerem,&nbsp;regionalen und frischem Essen,&nbsp;einem warmen Ambiente und unserem typischen Charme. Unser&nbsp;&aacute; la Carte&nbsp;ist f&uuml;r Jedermann. Hier wird unser Catering zum Restaurantbesuch. Sch&ouml;ne Gespr&auml;che, viel Lachen und erstklassiges Essen rundet auch Ihren Abend ab.&nbsp;<\/p>\r\n","title":"\u00e1 la Carte ","location":"Halle 17 ","date":"2022-11-12","time":"Ab 18 Uhr ","price":"je nach Auswahl ","places":0}}}';
    
    $event = json_decode($json, true)['event'];
    
    usort(
        $event,
        fn (array $a, $b): int => new DateTimeImmutable($b['date']) <=> new DateTimeImmutable($a['date']),
    );
    
    var_dump($event); // вот тут эвент уже отсортированный
  • Как правильно отсортировать JSON в PHP?

    @Dark_Dante
    Поставить флаг associative в труе у финкции json_decode, убрать теперь ненужное приведенеи stdObject к массиву, ну и отсортировать массив функцией сортировки массива?
  • Laravel для линуксоидов?

    @Dark_Dante
    Консоль и в винде есть, называется командная строка Забудь про остальные фреймворки, сейчас актуальны только 2 - symfony и laravel. Симфони посложнее, энтерпрайз, ларавель попроще. MVC это просто паттерн - разделение основных частей приложения на три слоя - модель, вид и контроллер. А информации в интернете полно, главное читать
  • Почему один и тот же код отрабатывает по разному?

    @Dark_Dante
    Андрей Гильгенберг, Господи, у родительского класса метод принимает два параметра, у наследника ты перегружаешь этот метод без параметров. Поэтому он и ругается.
  • Почему один и тот же код отрабатывает по разному?

    @Dark_Dante
    Почему ты через :: вызываешь нестаттические методы?
    Правильный вызов был бы через parent::
    Так же, судя по коду, вообще такой вызов не имеет смысла, можно использовать позднее статическое связывание, например
    class Animal {
        public const TYPE = 'animal';
    
        public function getInfo(){
            return "It's are {static::TYPE}";
        }
    
        public function giveResource($min, $max){
            return rand($min, $max);
        }
    }
    
    class Chiken extends Animal {
    
        public const TYPE = "chiken";
    }
    
    class Cow extends Animal {
        public const TYPE = "cow";
    }
    
    $cow = new Cow();
    
    var_dump($cow->getInfo()); // выдаст "It's are Cow
  • Докер. Почему не работает контейнер?

    @Dark_Dante Автор вопроса
    сергей кузьмин, а можно пример конфига рабочего? А то я чую что так не раскурю... Хотя прогресс есть. Выкинул пока все модули, вот это вот все, оставил чисто образ, переход в рабочую директорию. И симфоня поднялась. Ну как поднялась, кидает ошибку что типа нет директории var. Но это уже как бы решаемо - создам да права дам. Буду наверн по одной строчке расскомменчивать, вникать на каком этапе что идет не так
  • Докер. Почему не работает контейнер?

    @Dark_Dante Автор вопроса
    сергей кузьмин, А хз почему, делал все по образцам из энторнетов. Но как понимаю это я. volumes - это типа внутри докера создается каталог, куда копируется проект, а потом этот каталог примонтируется к контейнеру. Могу конечно недопонимать всю глубину наших глубин. Т.е. и у контейнера nginx и у контейнера php-fpm должен быть доступ к файлам проекта. Ну а как иначе то? nginx надо понять какой он файл дергает - index.php в нашем случае, а php-fpm надо этот и все остальные к нему подключенные автолоадером или инклюдом исполнить. Правильно? Т.е. одна директория volumes должна быть примонтирована к обеим контейнерам.
  • Докер. Почему не работает контейнер?

    @Dark_Dante Автор вопроса
    Дмитрий, Не хочет видеть волюм, не пойму в чем дело. Вернее волюм то примонтируется, но пустой. Разница буквально в одном - в названии образа. По идее образу должно быть вообще фиолетово какой волюм монтирую к нему. Но нет.
  • Докер. Почему не работает контейнер?

    @Dark_Dante Автор вопроса
    Дмитрий, ну да, комментатор выше в общем правильно сказал - я ж fpm даже в этом образе ставлю на пятой строчке докерфайла. Но я по моему начал осозновать в чем нехорошее. Зашел в контейнер в консоль, сделал просто "$ php-fpm8" и что я вижу:
    [27-Jul-2022 05:40:18] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address in use (98)
    [27-Jul-2022 05:40:18] ERROR: FPM initialization failed

    Попробовать поменять порт?
    Вывод версии вроде корректно отрабатывает
    php-fpm8 -v
    PHP 8.0.21 (fpm-fcgi) (built: Jul  7 2022 17:13:02)
    Copyright (c) The PHP Group
    Zend Engine v4.0.21, Copyright (c) Zend Technologies

    Но что смутило - PHP 8.0.21 - а я ж контейнер 8.1 подключаю...
  • Докер. Почему не работает контейнер?

    @Dark_Dante Автор вопроса
    Дмитрий, Не пробовал, но попробовал. Не помогло
    FROM php:8.1-alpine
    
    RUN apk add --no-cache \
            php8 \
            php8-fpm \
            libressl-dev  \
            postgresql-dev  \
            mc \
            nano \
            php8-ctype \
            php8-xmlreader \
            php8-xmlwriter \
            php8-fileinfo  \
            php8-gd  \
            php8-simplexml  \
            php8-bcmath \
            php8-redis \
            php8-curl \
            php8-xml \
            php8-zip \
            php8-dom \
            php8-mbstring \
            php8-sockets \
            php8-openssl \
            php8-phar \
            php8-iconv \
            php8-tokenizer \
            php8-pdo_pgsql \
            php8-pgsql \
            php8-session \
            curl
    RUN docker-php-ext-install pdo pdo_pgsql
    
    COPY . ./symfony
    
    WORKDIR "/symfony"
    
    RUN curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    
    RUN composer install --ignore-platform-reqs
    
    ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
    
    RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
        install-php-extensions amqp
    
    CMD ["php-fpm8", "-F"]


    Запуск fpm вроде корректно отрабатывает, ошибок никаких
    Step 10/10 : CMD ["php-fpm8", "-F"]
     ---> Running in 6c54c062496b


    Или имеется ввиду запускать как то по другому, например вручную через баш внутри запущенного контейнера?
  • Докер. Почему не работает контейнер?

    @Dark_Dante Автор вопроса
    сергей кузьмин, хм... Действительно так. Может какого конфига для php-fpm не хватает? Подскажите пожалуйста по конфигу nginx. Не могу ошибку найти
    Конфиг nginx
    server {
        listen 80;
        server_name localhost;
        index index.php;
        error_log  /var/log/nginx/error.log;
        access_log /var/log/nginx/access.log;
        root /symfony/public;
    
        location / {
            try_files $uri /index.php$is_args$args;
        }
    
        location ~ ^/index\.php(/|$) {
            fastcgi_pass base:9000;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
            internal;
        }
    
        location ~ \.php$ {
            return 404;
        }
    
        error_log /var/log/nginx/project_error.log;
        access_log /var/log/nginx/project_access.log;
    }

    Докерфайл nginx
    FROM nginx:1.23-alpine
    
    WORKDIR /symfony


    Вот что говорит nginx при попытке обратиться по 8080 порту
    32#32: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 172.25.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://172.25.0.3:9000", host: "localhost:8080"


    как это вижу я - контейнер с nginx запрос ловит, падает на попытке соединения на fastcgi://172.25.0.3:9000
  • Как решить проблему с переменной?

    @Dark_Dante
    и на пустоту проверяется не '' === $var, а, например empty($var) Иначе, волшебным образом там может оказаться например null. Или булево значение. И это значение благополучно пройдет эту проверку
  • Как посчитать разницу между датами без года в PHP?

    @Dark_Dante
    stevieg8, какой то такой г..нокод набросал по быстрому
    $birthDay = new DateTimeImmutable(
            (new DateTimeImmutable('8.06.1997'))->format('d.m') . (new DateTimeImmutable())->format('.Y')
        );
    
        $currentDate = new DateTimeImmutable();
    
        if ($birthDay->format('d.m.Y') == $currentDate->format('d.m.Y')) {
            echo 'Выводим поздравление';
        }
  • Как организовать поиск по xml документу?

    @Dark_Dante
    Гугли что такое xPath и как с ним работать. И XSLT. Можно все уместить в одну строчку кода
  • В чем причина таких ошибок?

    @Dark_Dante
    Отсутствуют файлы в директории. Все просто