Михаил
Ещё я храню по такому принципу автодополнения
Сами items для автодополнения хранятся на сервере в бд, и они периодически меняются.
каждый раз запрашивать их с сервера (около 10 тысяч строк) или во время ввода делать запросы - не комильфо. А раз в несколько минут в пределах активности или при старте работы получить обновления - это дёшево
Vlad
А лучше по ивентам получать изменения и лишний раз не делать запрос, если ты уже окунулся в это все
Vlad
Один фиг тебе нужны риалтайм события на изменения для актуализации кэша + при каждой инициализации запрос новых данных или вообще данных.
Vlad
Главное не забывай подчищать хрнилище
Михаил
Колесо сансары провернулось
Михаил
Забейте, спасибо за советы
Юра
Есть вообще специальные библиотеки для джс в которых есть реализация offline first
Юра
Они хранят на клиенте данные
Юра
В твоём случае ощущение не понятно все равно в чем проблема. У тебя что глобальный один updated_at с которым ты сравниваешь?
Михаил
Михаил
Виктор
Всем привет! Продолжаю изучать Symfony))
У меня есть сущность фотоальбома (Album) и фотографии (Photo). Есть контроллер AlbumController. В нём есть методы для корневого альбома (маршрут /album), произвольного (/album/{slug}), а также для последних (/album/recent) и случайных (/album/random) фотографий. Вопрос же касаются того, как правильно реализовать последние два.
Возьмём, для примера, последние добавленные фотографии (/album/recent). У меня на данный момент следующая идея (код ниже). Нормально ли вообще так делать - динамически создавать сущность для такой задачи? Или есть способы получше? Такой подход аргументирую тем, что можно использовать уже имеющийся код и работать как с обычным альбомом, чем оно по сути и является. С другой стороны, боюсь, что потом вылезут подводные камни (например, пока не касался пагинации вообще, поэтому не могу быть уверен, а не возникнет ли там проблем).
В общем, есть какие-то общепринятые практики для таких вещей? Везде же есть "последние комментарии", всякие ленты новостей и т.п.
#[Route('/album/recent', name: 'recent_album')]
public function recent(AlbumRepository $albumRepository): Response
{
$album = new Album();
$album->setTitle('Последние обновления');
$album->setDescription('Последние добавленные фотографии и фотоальбомы.');
$album->setParent($albumRepository->findRoot());
$album->setPublishedAt(new \DateTimeImmutable());
$album->setModifiedAt(new \DateTimeImmutable());
$album->setSlug('recent');
$recentAlbums = $albumRepository->findRecent(24);
foreach ($recentAlbums as $recentAlbum) {
$album->addChildAlbum($recentAlbum);
}
return $this->render('album/index.html.twig', [
'controller_name' => 'RecentAlbumController',
'album' => $album,
'breadcrumbs' => []
]);
}
Vlad
Всем привет! Продолжаю изучать Symfony))
У меня есть сущность фотоальбома (Album) и фотографии (Photo). Есть контроллер AlbumController. В нём есть методы для корневого альбома (маршрут /album), произвольного (/album/{slug}), а также для последних (/album/recent) и случайных (/album/random) фотографий. Вопрос же касаются того, как правильно реализовать последние два.
Возьмём, для примера, последние добавленные фотографии (/album/recent). У меня на данный момент следующая идея (код ниже). Нормально ли вообще так делать - динамически создавать сущность для такой задачи? Или есть способы получше? Такой подход аргументирую тем, что можно использовать уже имеющийся код и работать как с обычным альбомом, чем оно по сути и является. С другой стороны, боюсь, что потом вылезут подводные камни (например, пока не касался пагинации вообще, поэтому не могу быть уверен, а не возникнет ли там проблем).
В общем, есть какие-то общепринятые практики для таких вещей? Везде же есть "последние комментарии", всякие ленты новостей и т.п.
#[Route('/album/recent', name: 'recent_album')]
public function recent(AlbumRepository $albumRepository): Response
{
$album = new Album();
$album->setTitle('Последние обновления');
$album->setDescription('Последние добавленные фотографии и фотоальбомы.');
$album->setParent($albumRepository->findRoot());
$album->setPublishedAt(new \DateTimeImmutable());
$album->setModifiedAt(new \DateTimeImmutable());
$album->setSlug('recent');
$recentAlbums = $albumRepository->findRecent(24);
foreach ($recentAlbums as $recentAlbum) {
$album->addChildAlbum($recentAlbum);
}
return $this->render('album/index.html.twig', [
'controller_name' => 'RecentAlbumController',
'album' => $album,
'breadcrumbs' => []
]);
}
такое делают просто сортировкой по дате создания или изменения
Михаил
Всем привет! Продолжаю изучать Symfony))
У меня есть сущность фотоальбома (Album) и фотографии (Photo). Есть контроллер AlbumController. В нём есть методы для корневого альбома (маршрут /album), произвольного (/album/{slug}), а также для последних (/album/recent) и случайных (/album/random) фотографий. Вопрос же касаются того, как правильно реализовать последние два.
Возьмём, для примера, последние добавленные фотографии (/album/recent). У меня на данный момент следующая идея (код ниже). Нормально ли вообще так делать - динамически создавать сущность для такой задачи? Или есть способы получше? Такой подход аргументирую тем, что можно использовать уже имеющийся код и работать как с обычным альбомом, чем оно по сути и является. С другой стороны, боюсь, что потом вылезут подводные камни (например, пока не касался пагинации вообще, поэтому не могу быть уверен, а не возникнет ли там проблем).
В общем, есть какие-то общепринятые практики для таких вещей? Везде же есть "последние комментарии", всякие ленты новостей и т.п.
#[Route('/album/recent', name: 'recent_album')]
public function recent(AlbumRepository $albumRepository): Response
{
$album = new Album();
$album->setTitle('Последние обновления');
$album->setDescription('Последние добавленные фотографии и фотоальбомы.');
$album->setParent($albumRepository->findRoot());
$album->setPublishedAt(new \DateTimeImmutable());
$album->setModifiedAt(new \DateTimeImmutable());
$album->setSlug('recent');
$recentAlbums = $albumRepository->findRecent(24);
foreach ($recentAlbums as $recentAlbum) {
$album->addChildAlbum($recentAlbum);
}
return $this->render('album/index.html.twig', [
'controller_name' => 'RecentAlbumController',
'album' => $album,
'breadcrumbs' => []
]);
}
Я бы сделал какой нибудь AlbumViewContext и 2 статических метода
AlbumViewContext::createFromAlbum($album); и AlbumViewContext::createRecent(…whatever…);
А уже эти контексты передавать на рендер. Как плюс - ты явно разделяешь слои модели и представления.
Михаил
Или сделать какой/нибудь AlbumPresenter и тоже самое.
Короче у тебя будет какой нибудь слой который будет заниматься производством представлений доменных или любых других сущностей.
Виктор
Dmitry
Ребят, привет, кто занимался созданием своего корпоративного мессенджера? использовали готовое решение или писали свое ?
Vlad
Dmitry
Готовый
закинь че юзали чтоле
Dmitry
Владимир
а скок платите ?
Я хз, это была года 2 назад, я уже в другой компании 😅
Но, вроде как, там есть open source дистрибуция, поставил на машину у себя и все
Платно это облако
Владимир
Но это не точно. Мб правила изменились и т.д.
Надо углубляться и посмотреть
Михаил
закинь че юзали чтоле
а вообще фришная система, где можно созваниваться, писать сообщения втч и в тредах, чисто голосом поговорить это discord
Михаил
закинь че юзали чтоле
Есть от тинькова альтернатива слаку - TiMe, но вцелом ничем особо не отличается
Михаил
Да даже вспоминать не нужно, вот ссылка на 25 альтернатив
https://alternativeto.net/software/slack/?platform=self-hosted
Vlad
Михаил
Vlad
У меня одного такой прикол или доктрина 3 не считывает precision для TIMESTAMP когда миграции генерит для постгрес?
Михаил
Владимир
Vlad
как объявлял?
та пакет карбона стоит и его кастомный тип, там указываетя тип TIMESTAMP(6) WITH TIME ZONE
и вот на днях обновил проект до 7 симфы и 3 доктрины и теперь при генерации миграций каждый раз пытается сменить на TIMESTAMP(6) WITH TIME ZONE, так как определеняет как TIMESTAMP(0) WITH TIME ZONE
Михаил
Vlad
Михаил
Мы как то так объявляли
class DateTimeWithMicroseconds extends VarDateTimeImmutableType
{
private const TYPE_NAME = 'datetime_with_ms';
public function getSQLDeclaration(array $column, $platform): string
{
// если мускул или погрез
return 'TIMESTAMP(6) WITHOUT TIME ZONE';
// иначе
}
public function convertToDatabaseValue($value, $platform): mixed
{
if ($value === null || $plaform instanceof [PostgeSqlPlatform, MySQLPlatform]) {
return $value->format(sprintf('%s.u', $platform->getDateTimeFormatString()));
}
return $parent::convertToPHPValue(...);
}
public function getName(): string
{
return self::TYPE_NAME;
}
public function requiresSQLCommentHint(AbstractPlatform $platform): bool
{
return true;
}
}
Михаил
ну во, потом регистрируем в дактрине и всё работает как шанель
Denis
Всем привет
Ректором перевел Аннотации на аттрибуты, теперь ошибка не понятная, кто сталкивался с таким?
Symfony 5.4,
"doctrine/orm": "^2.11"
Михаил
Михаил
Там у каждого мапа должен быть тип attribute. Или должен быть включён auto_mapping в doctrine.orm
Михаил
Denis
Михаил
Тоесть сторонних бандлов нет, хорошо
Михаил
Снеси полностью папку var
Михаил
(Внутри проекта)
Михаил
ничего не изменилось
А, стоп, убери значит на false переведи. Ну и посмотри как у тебя другие бандлы регестрируются
Михаил
Я просто не знаю какие у тебя бандлы есть, но я знаю что бандлы могу сами себя в доктрине конфигурировать.
Denis
Doctor
<offtop> Бандлы не по алфавиту? Грешновато... </offtop>
Михаил
Просто непонятно что именно ректор сделал. Вообще ошибка странная. При неправильной конфигурации будет ошибка что «не нашёл entity manager»
Михаил
Ты под гитом же выполнял миграцию? Может он где-то наговнокодил
Denis
Ты под гитом же выполнял миграцию? Может он где-то наговнокодил
да под гитом, ну ректор в общем там перевел все аннотации типа
/**
* @Assert\Email(message="Invalid email.")
* @Assert\NotBlank(message="Email is required.")
*/
в
#[Assert\Email(message: 'Invalid email.')]
#[Assert\NotBlank(message: 'Email is required.')]
файлов штук 30 entities
Михаил
Посмотри по изменениям, если ректор менял комментарии то он мог что-то сломать
Михаил
Вот, а ошибка у тебя «неизвестная константа»
Это может произойти если ректор сделал к примеру вот так
#[ORM\Entity(doctrine)]
Михаил
git diff | grep doctrine
Михаил
Вообще эти аттрибуты сосут жопу.
Когда они появились я несколько раз сталкивался с segmentation fault. Искать их причину - то ещё удовольствие. Особенно когда они в аттрибутах. Написал вместо false - flase, и понеслось. Пару часов увлекательного дебага и составления репорта.
Михаил
Ещё увлекательней когда ты ловишь сегмы из-за рефлексии
Denis
git diff | grep doctrine
спасибо ! это реально помогло
ректор перевел такое
* @ORM\CustomIdGenerator(class="doctrine.ulid_generator")
в
#[ORM\CustomIdGenerator(class: \doctrine.ulid_generator::class)]
и изза этого была ошибка!
Doctor
Михаил
Михаил
Doctor
😢
Михаил
😢
Phpstan только года 2 назад начал нормально что-то находить. Php cs у меня может максимум выругаться на отсутстие \n в конце файла, но это может моя вина, его настраивать - боль
Spider
Коллеги подскажите как правильно использовать окружение симфы они для докера которое приведено на сайте симфы(https://symfony.com/doc/current/setup/docker.html)
Не очень ясна логика - надо ли и как пробрасывать файлы проекта которые будешь редактировать?
Или тут логика такая что написал проект собрал образ и тестируешь?
Михаил
Spider
вот это - линк взят из документации симфы https://github.com/dunglas/symfony-docker
Михаил
Ну судя по проекту - сам симфони проект должен быть внутри, то есть это просто каркас. Добавляешь папку app и внутри неё проект
Михаил
А не, вру
Михаил