akella.su
Даже сущностей нет, просто делаю generate, после migrate и ошибка эта
akella.su
Код подключения скопировал с другого проекта, тут вообще нечему ломаться по сути, но ошибка странная
akella.su
Может из-за того что использую последние версии MySQL, doctrine и т.д.?
Viktor
Может, ответ GPT поможет)))
Viktor
Ошибка SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 3072 bytes часто возникает при использовании миграций в Symfony (или в любом приложении, которое использует Doctrine для взаимодействия с базой данных) с MySQL, когда создается индекс или первичный ключ, который превышает максимальную допустимую длину. Вот несколько способов решения этой проблемы: ### 1. Измените длину полей Если у вас есть строковые поля, которые участвуют в композитном индексе, попробуйте явно указать их длину. Это может помочь сократить общую длину индекса. // Пример: Аннотируйте поля длиной /** * @ORM\Column(type="string", length=191) */ private $columnName; ### 2. Изменение типа поля Если возможно, попробуйте использовать более короткие типы данных. Например, вместо VARCHAR(255) используйте VARCHAR(191). ### 3. Использование уникальных индексов с ограниченной длиной Если вы определяете уникальный индекс на длинную строку, рассмотрите возможность ограничения длины индекса. Например: $schema->getTable('my_table')->addUniqueIndex(['column_name' => 191]); ### 4. Измените размер страницы в InnoDB Если у вас есть контроль над конфигурацией MySQL, вы можете попробовать увеличить размер страницы InnoDB до 16KB, но это потребует перезапуска сервера MySQL и потенциально изменения конфигурации сервера, что может быть невозможно для некоторых хостинговых сред. SET GLOBAL innodb_page_size=16*1024; ### 5. Обновление версии MySQL В некоторых случаях обновление до более новой версии MySQL может оказаться полезным. Версия 5.7 поддерживает большие размеры индексов, особенно если используется кодировка utf8mb4. ### 6. Использовать utf8 вместо utf8mb4 Если использование полного набора символов utf8mb4 (включая эмодзи) не является необходимым, можно использовать utf8, что уменьшит размер каждого символа. # config/packages/doctrine.yaml doctrine: dbal: charset: utf8 ### 7. Проверьте миграции и запросы Убедитесь, что в миграции SQL команды соответствуют типам данных, поддерживаемым вашей версией MySQL. Общие действия: - Просмотрите все миграции и найдите, где создается большой ключ. - Оптимизируйте схему данных, чтобы ключи были короче. Имейте в виду, что каждый из этих подходов имеет свои плюсы и минусы, и выбор подхода будет зависеть от конкретного контекста вашей задачи и структуры базы данных.
akella.su
Уже второй день не помогает, первом делом ему пишу
akella.su
Пробовал этот charset
akella.su
На другие примеры сущностей нет)
akella.su
То есть она даже таблицу миграций свою не может создать
akella.su
Только локальную и использую, она внутри контейнера
akella.su
akella.su
Михаил
Только локальную и использую, она внутри контейнера
Попробуй снести нахрен этот контейнер и другой контейнер бд посиавь
akella.su
akella.su
Попробуй снести нахрен этот контейнер и другой контейнер бд посиавь
Снести пробовал не раз, могу попробовать версию другую поставить
akella.su
На 8.0 также
Михаил
Просто единственное что он пытается создать - таблицу миграций
akella.su
Да
Михаил
Там нет длинных полей, больше чем 255 символов
akella.su
Один файл
akella.su
Михаил
А что за драйвер бд в настройках?
akella.su
pdo_mysql
akella.su
Версии доктрины все на этапе стабильно
akella.su
Михаил
Блин, ну пишут что innodb_large_prefix=true и еще какие-то настройки надо в ini файл прокинуть Но вроде никогда такого не было
akella.su
Я о том же, сколько использовал не сталкивался с этим
Михаил
Я о том же, сколько использовал не сталкивался с этим
В официальной доке есть инфа вот такая
akella.su
Можешь скинуть ссылку
Михаил
Можешь скинуть ссылку
https://symfony.com/doc/current/doctrine.html
Михаил
Там есть опция такая - charset
akella.su
Да есть
Михаил
Поставь utf8mb4
akella.su
Указал utf8mb4
akella.su
Также)
Михаил
Говно
akella.su
Согласен
akella.su
Херня какая-то
Михаил
А mb3? Оно же поосто utf8
akella.su
Усеченный вроде, но хз
akella.su
Без смайликов слышал
akella.su
Поставил postgres и все работает)
Igor
Привет! Подскажите, как юзать symfony/validator за пределами симфони? Создал файл DTO, $userRegisterDto = new UserRegisterDTO(); $validator = Validation::createValidator(); $violations = $validator->validate($userRegisterDto); count($violations); // все время 0
Igor
use Symfony\Component\Validator\Constraints as Assert; class UserRegisterDTO { #[Assert\NotBlank] #[Assert\Length(min: 5)] public string $email; }
Юра
Скорее всего голый валидатор не умеет читать из аттрибутов
Юра
Почитай доку может там написано
kakoi-to-noob
use Symfony\Component\Validator\Constraints as Assert; class UserRegisterDTO { #[Assert\NotBlank] #[Assert\Length(min: 5)] public string $email; }
Смотри реализации ValidatorInterface , и в них какие зависимости нужны
Anonymous
Привeт, нyжны 2 чeлoвeкa. Всe c тeлeфoнa или кoмпьютeрa. Oт 220 $ в дeнь. Удaлённaя зaнятocть. Пиши + в ЛC
Юра
use Symfony\Component\Validator\Constraints as Assert; class UserRegisterDTO { #[Assert\NotBlank] #[Assert\Length(min: 5)] public string $email; }
Голый валидатор будет работать если ты ему передашь вручную список Constraint
Юра
Тебе нужно просто посмотреть как его приготовить так чтобы он вычитывал метаданные из аттрибутов
Юра
Так как в симфе аттрибуты далеко не единственный способ описать валидации и они не могут всунуть все возможные варианты в компонент вадидатора
Юра
Если есть проект на симфони проще всего это делать если открыть сгенерированный файл контейнера найти там сервис валидации и посмотреть как он собирается
akella.su
Как лучше реализовать i18n на сервере, через файлы с переводами по коду или в бд хранить сам перевод?
akella.su
Через админку
Михаил
Значит через бд
akella.su
А как еще можно обновлять если есть другой вариант?
Михаил
Или через бд, но инсианс приложения по триггеру может брать данные и кешировать их в файловой системе
Михаил
Но тебе нужен механизм инвалидации кеша
Михаил
Так же старт приложения обязательно завязывается на запрос в бд
akella.su
Делать отдельную таблицу «языковые фразы» с полями en ru и т.д., и где нужен текст просто ссылаться на ту таблицу, нормальный вариант?
Михаил
Или таблицу key | lang | translate
akella.su
Можно, на клиенте стат тексты уже зашиты в json через next-intl по ключу достаю
Михаил
А тексты статичные или динамические? То есть переводится ui или ещё какие-нибудь статьи?
akella.su
Типо такого на клиенте
Михаил
Ну то есть один ui?
akella.su
Думаешь лучше на клиенте это делать?
Михаил
А зачем тогда в бд хранить?
akella.su
Хз, раньше такое не делал, поэтому не могу ответить
akella.su
Т.е. хранить в бд просто ключи а перевод хранить на клиенте?
Михаил
Позаботься о производительности - храни в файлах проекта. Тебе же новый перевод нужен только тогда, когда ui обновляется/ добавляется Зачем тогда в бд хранить?
akella.su
Все таки данные в бд динамичные, а на клиенте переводы статичны, поэтому думал может в бд хранить
Михаил
Если текст будет формироваться на сервере - то и на клиенте его хранить нет смысла