The Ant
Почему симфа не прокидывает локаль в эксепшоны? как фиксить?
Vlad
в джсоне рендеришь?
The Ant
в джсоне рендеришь?
твиг, рендер 403\404 страниц. локаль там всегда дефолтная
Vlad
ну поправь шаблон и усе
Vlad
будут переводы тебе
The Ant
я кастом сделал ) всё по ману. Но в шаблоне нет переводов
Vlad
как это нет?
Vlad
https://symfony.com/doc/current/translation.html#translations-in-templates
The Ant
ну вот так. рендерится шаблон с дефолтной локалью, пох че там указано
Vlad
все там есть мурваьевский
The Ant
https://symfony.com/doc/current/translation.html#translations-in-templates
оно там есть да, но не работает. Потому что во первых эксепшон контроллер это isMainRequest = false, а во вторых параметр _locale там всегда дефолт
The Ant
из-за этого интерфейс отображается на дефолтном языке. я конешь пофиксил кукой, и начал проверять куку в ивенте, выставлять нужную локаль, но не хочу этот костыль
The Ant
тип того
The Ant
всмысле редиректить на 404 или 403? )
Павел
всмысле редиректить на 404 или 403? )
Ну всмысле сразу туда. Найти место где этим управляется
The Ant
я устал :( хочется фикс. есть конешь решение это ивент отменить, который выставляет дефолт локаль. Но я не нашел как отменить системный ивент...
Павел
А вообще доступны /{locale}/404.html ?
Andrew
вот ты спросил чат гопоту и чо?
В каком смысле "и чо"? Он мне дал решение, в сообщении дальше оно описано. В конечном итоге я вообще решил каким то обобщённым путём, учитывая подсказки участников чата
Andrew
Я больше скажу, у меня была своя теория, я ещё и гуглил. Что плохого в том, чтобы брать информацию в разных источниках и принимать решение на основе всего полученного опыта?
The Ant
А вообще доступны /{locale}/404.html ?
я не делал отдельную страницу 404, рендерится эксепшон на том же урле
Иван
я не делал отдельную страницу 404, рендерится эксепшон на том же урле
бомбит с того, что для рендера 404 редирект делают
Павел
я не делал отдельную страницу 404, рендерится эксепшон на том же урле
Я имею ввиду, они вообще доступны или нет. Получается сейчас проблема, что 404 всегда на одном урле с дефолтным языком. Если поставить другой язык в урл (просто руками), что то изменится? Если страница не переведется, то урлы там не подтягиваюстя и видимо твой вариант , хоть и костыль, но судя по всему решение норм , иного просто не документировано
The Ant
а вообще можно подменить стандартные ивенты которые кернел бросает? (лол почему их два)
The Ant
короче пора заводить хдебаг сука... 🤬
Dmitry
а вообще можно подменить стандартные ивенты которые кернел бросает? (лол почему их два)
покажи как объявлял скорее всего у тебя в serviceyaml дополнительно объявлено
Dima
Может кто сталкивался - symfony в контейнере, кеш в папке /var, в dev происходит следеющее: При создании TwigFunction ее поведение не меняется до момента, когда контейнер остановлен и заново запущен, например public function getPhone() { return '+74957777777'; } будет выводится всегда 74957777777 даже если я изменю это значение, почищу кеш (руками или через консоль), один хер будет 74957777777. Как я понял это проблема docker, но решения не нашел. P.S. Делал отдельный volume на /var, все едино, поведение такое же. Изменение файлов шаблонов и кода срабатывает нормально, такой баг только для TwigFunction
Павел
Может опкэш какой
Dima
Может опкэш какой
Дай я тебя расцелую!!! Опкеш на деве включил по глупости малолетней
Михаил
Стоп, опкеш запоминает результат функций которые возвращают константное значение? Зачем?
Vlad
Так это база. Если обновление opcache выключено, конечно будет всегда один результат
Алексей
Дай я тебя расцелую!!! Опкеш на деве включил по глупости малолетней
как то странно, а почему только это значение в опкэше оказалось? а как работать с опкэш чтобы такого не было
Vlad
Поди opcache.validate_timestamps=0 установлен
Dima
Было так [opcache] opcache.enable=1 opcache.revalidate_freq=0 opcache.validate_timestamps=0 opcache.max_accelerated_files=10000 opcache.memory_consumption=192 opcache.max_wasted_percentage=10 opcache.interned_strings_buffer=16 opcache.fast_shutdown=1
Михаил
Он запомнил код, а не результат
А зачем? Я думал что опкеш это мемоизация. А он оказывается опкоды запоминает
Dima
наверно поэтому он и называется **оп**кеш
Павел
А зачем? Я думал что опкеш это мемоизация. А он оказывается опкоды запоминает
Честно, знаком поверхносто, чисто предположил и угадал)
Павел
Но посути мы ему имено коды и файлы скармливаем
Павел
Поэтому логично что он именно код запоминает, что бы его не интерпретировать каждый раз
Михаил
Павел
Нее, зачем вцелом всё это?
Чтобы интерпретацию кода не запускать
Павел
Уже готовый лежит, готовый к исполнению
Павел
У нас же php code -> opcode, при каждом вызове скрипта. А при кэшировании, сразу op code файла.
Павел
Ну вроде)))
Михаил
То есть если я использую демонизацию процессов - то опкеш бесполезен?
Павел
То есть если я использую демонизацию процессов - то опкеш бесполезен?
Для демона скорее всего да. Потому что демон запустился, скопилировлся - работает. Мы же когда код меняем рантайм, демон работает со старым кодом. Например тот же мессенджер. Т.е. экономия только на запуске. Но может кто поправит.
Михаил
У нас же php code -> opcode, при каждом вызове скрипта. А при кэшировании, сразу op code файла.
Ммм, опкод это промежуточный код, типо как байткод, понятно.
Виктор
Привет! Изучаю Symfony, делаю первый проект. Не могу разобраться с Doctrine. Допустим, у меня есть сущность Comment. Каким образом мне связать её с несколькими другими сущностями? Комментарий можно оставить как в фотоальбоме (Album), так и в фотографии (Photo) или статье (Text). Есть ли какая-то возможность сделать OneToOne в рамках свойства parent комментария, или мне вообще нужны отдельные CommentAlbum, CommentPhoto, CommentText?
Виктор
Если я правильно понимаю, речь идёт об этом? https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html
Виктор
То есть у меня будет класс Comment с общими для всех комментариев полями, а от него уже будут наследовать AlbumComment, PhotoComment, TextComment и т.д. И у каждого из них будет поле parent, привязанное к соответствующей сущности (Album, Photo, Text). Верно? Насколько я понял, есть несколько вариантов это реализовать (подробно в доку выше ещё не вникал, только нашёл)?Есть ли какой-то проект, где бы можно было увидеть такую реализацию связей? Мне пока не удалось найти на github(
Виктор
Вот такой пример нашёл. Это вообще нормальная реализация? https://www.inanzzz.com/index.php/post/e0ln/using-doctrine-entity-inheritance-mapping-in-symfony
Виктор
То есть получается, что репозиторий у нас для всех наследников один? И возвращаемый тип будет Comment, а фактический тип будет определяться исходя их этого: @ORM\DiscriminatorMap({ "album"=AlbumComment::class, "photo"=PhotoComment::class, "text"=TextComment::class }) То есть я запрашиваю, допустим, по id комментарий. И в момент создания объекта репозиторий по дискриминатору определяет, какой именно класс для этого использовать. А если мне нужно получить, например, все комментарии для альбома с id 3? Мне нужно сделать так? $q->andWhere('discriminator = :discriminator') ->setParameter('discriminator', 'album') ->andWhere('parent = :parent') ->setParameter('parent', 3) Если да, то как тогда грамотно сделать методы для получения комментариев с различными родителями? Кажется, будто бы делать это в одном репозитории, а тем более методе - неправильно... Или это нормально, и контроллер просто должен передавать в метод репозитория тип комментария? Типа: // метод репозитория public function getCommentsByParentId(int $parentId, string $parentEntityType) { ... } // и где-то в контроллере $commentRepository->getCommentsByParentId(3, 'album');
Павел
То есть получается, что репозиторий у нас для всех наследников один? И возвращаемый тип будет Comment, а фактический тип будет определяться исходя их этого: @ORM\DiscriminatorMap({ "album"=AlbumComment::class, "photo"=PhotoComment::class, "text"=TextComment::class }) То есть я запрашиваю, допустим, по id комментарий. И в момент создания объекта репозиторий по дискриминатору определяет, какой именно класс для этого использовать. А если мне нужно получить, например, все комментарии для альбома с id 3? Мне нужно сделать так? $q->andWhere('discriminator = :discriminator') ->setParameter('discriminator', 'album') ->andWhere('parent = :parent') ->setParameter('parent', 3) Если да, то как тогда грамотно сделать методы для получения комментариев с различными родителями? Кажется, будто бы делать это в одном репозитории, а тем более методе - неправильно... Или это нормально, и контроллер просто должен передавать в метод репозитория тип комментария? Типа: // метод репозитория public function getCommentsByParentId(int $parentId, string $parentEntityType) { ... } // и где-то в контроллере $commentRepository->getCommentsByParentId(3, 'album');
Сделайте мэни-ту-мэни с разными сущностями или полморфные связи, или вообще раздельные комментарии . Просто угрязнете в этом всём, уже угрязли. Тем более что новичок. Дескреминаторы и так спорное решение, и тем более когда не прошарен
Виктор
Павел, так а полиморфные связи - это разве не название того, о чём я написал? Вот это оно? https://stackoverflow.com/questions/22488990/polymorphic-relationship-in-doctrine-2
Павел
Дескриминаторы - это про другое
Виктор
А можно пример, как это примерно выглядеть будет?
Павел
Пример, это когда соединительная таблица не из 2 столбцов comment_id entity_id а из 3 comment_id entity_type enityt_id
Павел
Но опять же проще сделать просто тогда разные мэни ту мэни
Павел
Ну и связи делать не обязательно
Павел
Можете сделать просто many_to_one
Павел
Comment с полями entity_type entity_id
Павел
Т.е. просто id, а не связь
Виктор
Эм, но это же как-то костыльно, не? Тут вопрос в первую очередь в том, как это правильно делается на большом проекте - я же научиться хочу) Или так и делается на практике?
Павел
Эм, но это же как-то костыльно, не? Тут вопрос в первую очередь в том, как это правильно делается на большом проекте - я же научиться хочу) Или так и делается на практике?
Это не костыльно. На большом проекте как раз максимально отказываются от связей, чтобы было меньше зависимостей и соприкосновений
Павел
Типа как, чтобы создать объект обезьяны, надо создать луну
Павел
У вас вообще крудиловка