Сергей
мануально?
artem
ладно, я тупой) поставил так brew install php-cs-fixer
artem
composer require php-cs-fixer еще есть идеи?
Vite4eg
Ты объясни, откуда у тебя вообще эта ошибка? Тебе всё-таки этот пакет нужен или нет?
Сергей
вопрос в чем? как поставиь пакет с помощью composer ?
Vite4eg
А то говоришь, что запускаешь псалм, а потом спрашиваешь, почему ругается на php-cs-fixer
Vite4eg
Это два разных пакета
artem
Ты объясни, откуда у тебя вообще эта ошибка? Тебе всё-таки этот пакет нужен или нет?
нужен. он внутри проекта, и выдает ошибку когда срабатывает хук на гит коммит
Vite4eg
А в списке зависимостей этого пакета нет? посмотри в composer.json
Vite4eg
А кто хук прописал? Ты сам?
artem
#!/bin/bash set -eE bash $(pwd)/.githooks/support/init-hooks.sh bash .githooks/support/psalm/run-psalm.sh bash .githooks/support/fixer/run-fixer.sh --dry-run
Vite4eg
Что прописано в run-fixer.sh?
artem
#!/bin/bash set -eE DRY_RUN=$1 PROJECT_ROOT_DIR=${2-$(pwd)} WORK_DIR=$(pwd) SUBMODULE_PATH=${WORK_DIR:${#PROJECT_ROOT_DIR}+1} if [ -z "$SUBMODULE_PATH" ] then SUBMODULE_PATH=. fi RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' function errMessage() { printf "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n${NC}" >>/dev/stderr printf "${RED}You have to fix your code. See details ABOVE\n${NC}" >>/dev/stderr printf "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n${NC}" >>/dev/stderr printf "${NC}\n" } trap 'errMessage' ERR if [ -f /.dockerenv ]; then printf "${RED}do not run inside containers\n${NC}" >>/dev/stderr exit 1 fi #outside of container FILES_FOR_COMMIT=$(git diff --cached --name-only --diff-filter=AM | tr "\n" " ") COMMANDS=$( cat <<END_COMMANDS ROOT_INSIDE_DOCKER=\$(pwd) && cd $SUBMODULE_PATH && \$ROOT_INSIDE_DOCKER/vendor/bin/php-cs-fixer fix --config="\$ROOT_INSIDE_DOCKER/.php-cs-fixer.php" $DRY_RUN --diff --path-mode=intersection --using-cache=no $FILES_FOR_COMMIT END_COMMANDS ) cd $PROJECT_ROOT_DIR/docker docker-compose exec -T php sh -c "$COMMANDS" printf "${GREEN}Everything is good. You can continue" printf "${NC}\n" cd $WORK_DIR # todo: do not add if partially added files #if [ -n "$FILES_FOR_COMMIT" ] #then # git add $FILES_FOR_COMMIT #fi
artem
function errMessage() { printf "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n${NC}" >>/dev/stderr printf "${RED}You have to fix your code. See details ABOVE\n${NC}" >>/dev/stderr printf "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n${NC}" >>/dev/stderr printf "${NC}\n" } вот эта ебатня и срабатывает
Vite4eg
Там вроде из проекта срабатывает. Тогда composer require friendsofphp/php-cs-fixer
Сергей
--dev тока добавить
Юра
Кто-то сталкивался с таким? https://github.com/symfony/symfony/issues/48195
Kirill
Кто-то сталкивался с таким? https://github.com/symfony/symfony/issues/48195
если PHP 8.1, то возможно это опкеш рейс кондишн
Юра
Да там коде какой-то тупняк у них по-моему
Юра
Делается new на юникод символе каком-то. Вообще не понимаю что это и зачем
Юра
https://github.com/symfony/cache/blob/6.1/CacheItem.php#L186
Kirill
А, всё, да
Kirill
увидел ссылку на код
Kirill
тогда нет, не опкеш, а у них хрень какая-то
Юра
Причем это приватный метод pack
Юра
И вызова в самом классе нет
Юра
Но он вызывается из другого месте
Юра
Как)
Sergey
Доброго времени суток. Есть ли в симфе/твиге способ объединения ресурсов (css/js) загружаемых на странице в один файл? Насколько я понимаю сейчас есть только вариант через вебпак обёртку с долгим и нудным перечислением скриптов для последующей ручной компиляции
Sergey
там энкор идёт почти из коробки, не?
да, это как раз то о чем я писал. Насколько я понимаю, необходимо описывать entry для каждой страницы вручную, (если мы говорим о том, что на каждой странице разные скрипты) Это решение показалось мне слишком громоздким и я засомневался, что двигаюсь в правильном направлении
Kirill
ну зависит от реализации
Kirill
в пыхе ты тоже можешь каждую страницу отдельным скриптом описывать
Sergey
само собой. Просто я интересуюсь есть ли какое-то решение аналогичное подходу битрикса (да простят меня обитатели чата)
Sergey
Т.е. перечисляются ассеты и потом они просто выводятся одним файлом в header
Сергей
Ну импортни всё в один файл и все
Sergey
Ну импортни всё в один файл и все
Это валидное решение, если суммарный вес файлов будет по итогу небольшим
Sergey
да ладно, я понял, что чудес не бывает и надо пострадать, чтобы было хорошо)
Сергей
Не понял) то ты хочешь в один файл всё, то нет)
Sergey
Не понял) то ты хочешь в один файл всё, то нет)
Я хочу чтобы подключаемые ресурсы страницы page1 были собраны вместе, но чтобы туда не попали ресурсы из page2
Юра
Привет полуношники
Юра
Я пытался найти в доктрине функионал и в итоге пришлось запилить самому. Короче в чем суть. Есть наследование энтитией и надо выбрать только определенного типа
Юра
Вот рабочий вариант с моим патчем доктрины. Возможно это можно сделать по другому поправьте может я туплю
Юра
Юра
OF TYPE выбирает только этот тип, без наследников
Миша
Странное дело: в доках к моей SonataMedia 3.28.0 https://docs.sonata-project.org/projects/SonataMediaBundle/en/3.x/reference/helpers/ сказано что есть твиг-функция: {{ sonata_thumbnail(media, 'small') }} для то ли генерации эскизов, то ли просто рендеринга элементов с ними, но суть в том что если я пытаюсь её использовать в шаблоне, симфони ругается на отсутствие такой функции: Unknown "sonata_thumbnail" function. Перечитал процесс установки и настройки SonataMediaBundle - там никакого намёка на то, что поддержку thumbnails нужно как-то отдельно устанавливать в виде отдельного расширения. Зато обнаружил что есть тэг thumbnail... Косяк в документации что ли.
Andrii
да, это как раз то о чем я писал. Насколько я понимаю, необходимо описывать entry для каждой страницы вручную, (если мы говорим о том, что на каждой странице разные скрипты) Это решение показалось мне слишком громоздким и я засомневался, что двигаюсь в правильном направлении
Можно конфиге webpack написать ручками функцию, которая вернёт список файлов, которые лежат где-то, например, в assets/js/pages/. Далее делаем forEach(f=>conf.addEntity(f.name, f.path) После в твиге используте f.name, чтобы подключить нужный набор Вариант 2 использовать lazy import и держать все в одном файле, а в самом js уже решать на какой странице какие компоненты грузить. О плюсах и минусах подходов думайте сами « перечислением ассетов, это не то что вам нужно. Webpack создаёт entrypoints, где идут списки того, что нужно для entity, что вы подключили. И вам надо сделать подключение частей в этих entity (есть методы, которые в twig возвращают эти списки. Надо только описать как и где оно подключается на странице )
Юра
Плюсаните если не жалко https://github.com/doctrine/orm/issues/10226
Миша
Привет! Задался вот вопросом: как назвать метод, который наполняет свойство-массив данными, но при этом не имеет аргументов. Вроде как обычным setProperty язык не поворачивается назвать, потому что аргумент не передаётся. Может populateProperty?
Kirill
initProperty
Миша
Кто нибудь знает как в доктрине сделать запрос где подзапрос в from? Чтобы вот такую конструкцию замутить: SELECT count(DISTINCT table1.id), count(DISTINCT table2.id) FROM (SELECT 1) allways_not_empty_table left join table1 ON table1.field1 = 'someA' left join table2 ON table2.field2 = 'someB'; Не могу придумать других способов получить список количесств строк из разных не связанных таблиц. Если не делать FROM (SELECT 1) а делать SELECT FROM (someTable) то если в someTable не будет записей то запрос всегда нули будет возвращать.
Миша
Посмотрите ответ ниже на схожий вопрос
Понятно, всё плохо. Ладно, наверное лучше подберу таблицу которая никогда не пустеет и буду её в from кидать, как бы бредово это не смотрелось. Рефакторинга ради...
Юра
Юра
Есть сабселект
Юра
Смотри dql там есть описание парсера
Kirill
Всем привет! Подскажите, должен ли репозиторий (в широком смысле) содержать метод save? Вроде бы не должен и это не его зона ответственности, но вот разворачивал проект на TypeScript, там аналог доктрины TypeOrm и повсюду репозиторий имеет метод save
Null
В доктрине не те репозитории, которые ты ищешь.
Павел
Всем привет! Подскажите, должен ли репозиторий (в широком смысле) содержать метод save? Вроде бы не должен и это не его зона ответственности, но вот разворачивал проект на TypeScript, там аналог доктрины TypeOrm и повсюду репозиторий имеет метод save
По разному делают. Например у нас есть ссылка на первоначальный объект в репо, а точнее глубоко под капотом единого IdentityMap и UoW. Это нам позволяет делать флаш вне репозитория. Если бы этого не было, пришлось делать внутри save. Опять таки, наш флаш он глобальный, т.е. метод save сохранит все объекты, а не только которые относятся к репо. С другой стороны, почему мы должны в проекте и бизнесе привязываться к доктрине и UoW? Например мы заменили на свою реализацию, где нормальный UoW на один агрегат а не глобал транзакция. Теперь нет смысла в каком то отдельном флаше. Или вообще отказались от UoW. Короче немного холиварненько
Павел
Ну еще можно к этой идее подходить как что репозиторий - коллекция, а flush - сброс на диск, не в рамках доктрины, а в целом:) Типа репо - это в оперативке, а флаш - сбрасывает на жесткий диск.
Юра
У uw не хватает какой-то концепции Аля скоупы или что-то такое
Юра
Чтобы можно было какието managed scope создавать
Юра
И флашились изменения только там. Но это наверное сильно усложняет
Миша
Мне нужен подзапрос в From. Если посмотреть в том же мане в разделе Clauses, то там будет вот что: FromClause ::= "FROM" IdentificationVariableDeclaration {"," IdentificationVariableDeclaration}* SubselectFromClause ::= "FROM" SubselectIdentificationVariableDeclaration {"," SubselectIdentificationVariableDeclaration}* То есть как я понял это значит, что в FROM он ожидает увидеть только идентификатор и ничто другое. Мне же нужно туда запихнуть SelectClause. Впринципе в пользу того что в FROM нельзя делать подзапрос и issue на GitHub говорит: https://github.com/doctrine/orm/issues/3542
Vlad
да че вы дрочитесь с этим dql, чистый скуль+resultSetMapping
Миша
да че вы дрочитесь с этим dql, чистый скуль+resultSetMapping
Так задача поставлена. Делать через query builder, на крайняк через dql, sql на самый крайняк.
Юра
Делай через dbal квери билдер
Юра
А не dql квери билдер
Shokha
Добрый день, вопрос не совсем по Symfony. Нужен совет про архитектура база данных. У меня проект типа интернет магазин. Там есть 4 вида пользователей: 1) Admin 2) Seller 3) Customer 4) Сourier Admin и Seller зайдет с логин и паролем на сайт через браузер! У Customer и Сourier через accessToken, у них не будет логин пароль. они получить токен по подтверждения номер телефона. Eсть 2-3 таблица который может сделать изменения любой пользователь. Как быть в таком случае? У меня сейчас идея создать главную таблицу Identity там хранить логин, пароль, токен, номер телефона и роль(ROLE_ADMIN, ROLE_CUSTOMER и.т.д) и еще 4 таблица 1) Admins 2) Sellers 3) Customers 4) Сouriers связь один к одному к таблицу Identity
Денис
Добрый день, вопрос не совсем по Symfony. Нужен совет про архитектура база данных. У меня проект типа интернет магазин. Там есть 4 вида пользователей: 1) Admin 2) Seller 3) Customer 4) Сourier Admin и Seller зайдет с логин и паролем на сайт через браузер! У Customer и Сourier через accessToken, у них не будет логин пароль. они получить токен по подтверждения номер телефона. Eсть 2-3 таблица который может сделать изменения любой пользователь. Как быть в таком случае? У меня сейчас идея создать главную таблицу Identity там хранить логин, пароль, токен, номер телефона и роль(ROLE_ADMIN, ROLE_CUSTOMER и.т.д) и еще 4 таблица 1) Admins 2) Sellers 3) Customers 4) Сouriers связь один к одному к таблицу Identity
Можно сделать разные таблицы для обычных юзеров с логином паролем и для пользователей апи. И уже кастомные аутентификаторы, которые эти вопросы будут разруливать. По твоему варианту - я бы не стал создавать разные таблицы на каждую роль. Можно хранить всех в одной и вынести токен в отдельную таблицу, так как токенов у юзера может быть несколько, если он с разных устройств заходит. И у юзера апи будут поля с логином и паролем, но, предположим, пустые.
Thawne
Всем привет, хотел спросить, getResult() должен выдавать join? Когда делаю getArrayResult() то все нормально, но через getResult() join просто игнорируется…
Null
а как ты понял, что он игнорируется?
Thawne
ну не игнорируется, а он просто не ”приходит”
Thawne
Thawne
Thawne
1 - это getResult() 2 - getArrayResult()