Веб-версияОткрыть в Telegram
CCекта свидетелей веб программирования

Cекта свидетелей веб программирования

@dev_ru · группа · Технологии · в индексе с 2026-05-24
455участников+6 за неделю
7пишущих за 30 дней
66сообщений за 30 дней
81 328сообщений в индексе
E
Anton StepanovВсё это кажется очень сложным и геморным. От меня хотят наборы параметров которых может быть 100500 штук, они могут быть с одинаковыми названиями но разным контекстом, в общем виде передавать это всё как массив в коде ... не знаю )
ну не совсем ты сам с помощью entries определяешь что тебе нужно доставать через container->get если для entries нужен параметр (например dsn) библиотека не может его взять с потолка значение нужно передать а где ты его хранишь в массиве, в json или yaml или xml файле это особенность твоего проекта библиотека не навязывает тебе решение, делай как хочешь но библиотеке передай одним параметром, а какой тип сюда лучше подходит ? (array) если тебе надо много таких entries и для их конфигурации надо много параметров ну значит передавай их все библиотека убедится на этапе компиляции что каждый entries достижим и в runtime не будет сюрпризов если что то забыл, библиотека не скопилирует контейнер и покажет что и где она не смогла разрешить. список entries тоже может формироваться не в ручную, а с помощью discovery но его надо реализовывать самому проекту, не библиотеки
A
Тогда возможно нужно показать как это делать рекомендуется. Возможно с примером symfony/config + твой контейнер
  1. E
    возможно я не достаточно ясно это показал где у проект в конструкторе env передал и значение параметра определяется либо из env либо дефолтное понятно что можно расписать более подробно но тогда дока будет огромной и библиотек для конфигурации очень много а бибилотек для конфигурации много, а значит много мнений как надо делать выбирая одно отсекаются другие в любом случае я думаю сделать отдельную страницу в доке про discovery что это можно реализовать можно также и либы конфигурации отдельными странциами сделать, с примерами. подумаю
Вся ветка · 1 ответ →
A
<?php namespace App; class Project extends \Cekta\DI\AbstractProject { public function __construct(public readonly array $env = getenv()) { parent::__construct( filename: __DIR__ . '/../runtime/Container.php', fqcn: 'App\Runtime\Container', params: [ // ваши параметры \PDO::class . '$dsn' => $env['DB_DSN'] ?? 'sqlite:' . __DIR__ . '/../mydb.sqlite', ], ); } public function definition(): array { return [ 'entries' => [ \PDO::class, ], 'alias' => [], 'singletons' => [], 'factories' => [], ]; } } Тут юз $env только как $env['DB_DSN'] аля опракинули снаружи. Ты хочешь сказать, что то, что передаётся в обычном symfony проекте в конфигурационных файлах/ресурсах, которых может быть туева хуча, то - что резолвится не всегда очевидным образом (компилируется и тд) и может иметь компонентную/изолированную структуру (когда одно - ничего не знает о другом) ... вот это вот всё я должен собрать и как-то передать в Project ... И при этом нет примеров как тут быть. Ну не знаю, в общем случае это выглядит проблемой. За казалось бы простой строчкой "Создаем конфигурацию вашего проекта" кроется громадное количество вопросов. Как хранить, как загружать, резолвить, передавать 😄 Ну понятно в целом. Нужно передавать. Как и что зависит от проекта. Как вам удобно так и делайте. Погуглите как конкретно вам будет лучше. Либа не может этого знать )
  1. E
    Ссылка
    нажмите — покажем
    да именно так таким вопросом обычно занимается фреймворк я понял твою идею взять симфони и показать как это di можно его заменить но в symfony di глубоко вкопано и там ContainerBuilder в бандлах и тд все строится вокруг di который был изначальнно в симфони и заменить его без багов будет крайне проблемно я не могу в либе брать всю работу с конфигурацией в проекте я понимаю о чем ты говоришь это действительно так но я подразумеваю что у человека в проекте работа с конфигами решена если нужен скелет для создания api где многое решено добро пожаловать в https://github.com/cekta/skeleton и тут далеко не все решено (конфигурация на базовом уровне) тут решено: 1. discovery 2. расширение через модули (как бандлы в symfony просто другой апи) 3. работа с http и маршрутизация 4. консольные команды 5. миграции 6. фоновые задачи и очередь ну и есть места что надо улучшать (в том числе в сделанном)
Вся ветка · 1 ответ →
A
Я про аля такой пример (ИИ-шный код на коленке с моей мыслью) нужен там фрейм или не нужен ... просто если либа зависит от "в проекте работа с конфигами решена", то в случае если нет - помочь решить. К самой либе конечно это не относится.
E
насчет бутстрапа и генерации контейнера в рантайме опция такая есть но на практике она крайне не рекомендуема
E
Фотография
нажмите — покажем
я вот по максимуму упростил пример сейчас вот такая страница
  1. E
    да я тут не стал упоминать что 1. Можно сделать discovery и конфигурацию строить на основе неё (Project это DTO который может заполняться откуда угодно) 2. Конфигурация параметров может браться из штатного конфига (Project это DTO может принимать откуда угодно) 3. Можно генерировать контейнер как в рантайме (проверяя существования файла или еще как), так и отдельным скриптом и тд и другие холиварные вещи
Вся ветка · 1 ответ →
E
Фотография
нажмите — покажем
я по минимуму дал нагрузку чтобы было как можно меньше шансов стрельнуть в ногу на отдельной странице расписал конфигурацию ну и есть общее меню навигации (я там почти все разделы доделал)
E
Фотография
нажмите — покажем
в это общее меню я планирую добавить отдельные страницы 1. discovery 2. Генерации контейнера в runtime (покажу как это можно сделать, какие есть минусы почему не стал показывать как основной flow и что это приемлемо в разработке) другие какие странички
E
Фотография
нажмите — покажем
поручил и залипаешь смотришь фильм надо купить подписку нормальную ото у меня ограничение на бесплатном тарифе (48k контекстное окно для qwen3.6-35b-a3b) зато работает быстро)
G
🔨 1 new commit to di:documentation: 8cc616f: documentation iteration 1 by Evgeniy Kuvshinov
G
🔌 New pull request di#185 documentation iteration 1 by: @smpl Reply to this message to post a comment on GitHub.
G
🔨 2 new commits to di:master: 8cc616f: documentation iteration 1 by Evgeniy Kuvshinov 0612a6c: documentation iteration 1 (#185) by Evgeniy Kuvshinov
E
Узнал интересный способ как можно стандартные функции мокать в автотестах такой синтаксис доступен с php 8.1 (странно что я это не использовал раньше, приходилось через интерфейсы или классы обертки мокать) /** * @var Closure(string $filename): bool */ private readonly Closure $fileExists; /** * @var Closure(string $filename, mixed $data, int $flags =, ?resource $context =): int|false */ private readonly Closure $filePutContents; public function __construct( ?Closure $fileExists = null, ?Closure $filePutContents = null, ) { $this->fileExists = $fileExists ?? file_exists(...); $this->filePutContents = $filePutContents ?? file_put_contents(...); } до php 8.1 можно было через callable делать $this->fileExists = 'file_exists'; если это callable вызовится а с php 8.5 синтаксис стал еще проеще /** * @param Closure(string $filename): bool $fileExists */ public function __construct( private readonly Closure $fileExists = file_exists(...), ) { } кто не знал пользуйтесь по умолчанию используется обычная функция но в автотестах ее можно легко мокнуть!!! раньше для такого создавали интерфейс (и реализацию с проксированием в функцию).
E
на днях zed ide подружил с xdebug все оказалось довольно просто и приятно :) все это в docker
E
php + xdebug в docker zed ide на хосте запущенна хотя у zed ide есть интересная фишка remote ide которая очень круто отличаются от jetbrains :)
  1. V
    а понял, дефолтный вариант .. согласен в таком режиме всё достаточно просто
Вся ветка · 1 ответ →
E
тут пришлось запустить gitlab по работе базовый образ (image) прямо включает в себе лучшие практики работы с docker postgresql['enable'] = false redis['enable'] = false nginx['enable'] = false prometheus['enable'] = false grafana['enable'] = false alertmanager['enable'] = false node_exporter['enable'] = false все свое ношу с собой, это не считая что там вмуровано puma и sidekiq
E
а еще gitlab CE не поддерживает логирование в stdout/stderr ну логично если оно в image как в vm сложило все что можно сколько там конфигов править надо.
E
а еще jira это стандарт де факто как тасктреккер но насколько на него больно смотреть когда он голый (без плагинов) там все тормозит, даже доска при изменениях не обновляется у других!!! (если кто то задачу перенес в другой статус) как такое стандарт де факто, надо свой таск треккер поэтому все фронтендеры при написание нового фреймворка рассматривали его на примере таск треккера

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем