170 похожих чатов

Доброй ночи. в моделях публикаций добавляю возможность тегнуть других юзеров.

верно ли юзать такой подход как расписал?)

; создание поста. принимаем текст от автора
$body = 'some text @useralias text text @id55 text';

> выбираем все @упоминания, находим каждого юзера, создаем связь юзеров с постом
> заменяем в тексте упоминания в виде alias на формат @id{user_id} для более простого формирования ответа апи

; форимирование ответа
$body = 'some text @id15 text text @id55 text';

> находим регуляркой все упоминания
> берем id юзеров которые есть в отношениях к посту, заменяем в тексте формат @id{user_id} на alias, если он указан у упомянутого

$mentions = [
'@id15' => new UserResource(...),
'@id55' => new UserResource(...),
...
];

$result = [
'body' => $body,
'mentions' => $mentions,
]

> на фронте легко делаем замену упоминаний на ссылки. алиасы всегда актуальны, если юзер сменил никнейм.

6 ответов

9 просмотров

А зачем регуляркой делать и получать массив вида $mentions = [ '@id15' ]? Не проще при сохранении поста сразу делать связь пользователя и поста через manyToMany и sync() объединять при правках поста?

wzk- Автор вопроса
Павел Успенский
А зачем регуляркой делать и получать массив вида ...

при выводе скорее да. необходимости уже нет. на фронте заменим айдишки при наличии алиасов. по сохранению нормально? перед публикацией я еще добавлю туда проверку что каждый упомянутый не заблокирован у автора поста и наоборот. много заморочек с проверками увы

wzk
при выводе скорее да. необходимости уже нет. на фр...

ну да когда есть связь то проще сразу делать проверки на выдачи

wzk- Автор вопроса
Павел Успенский
ну да когда есть связь то проще сразу делать прове...

проверка на чс до создания связи. чтобы уведомления не отправились после публикации. в случае с чс, мы просто игнорируем упоминание дальше в беке

wzk- Автор вопроса

это уже больше так, доп защита приватности. заблокированные юзеры не появляются в листе при их поиске. так сказать чтобы и руками не вписали. аудитория такая, что раз уж кинул в чс, то на сайте вы нигде не пересечетесь)

wzk
screenshot это уже больше так, доп защита приватности. заблок...

Обычно фронт такие вещи делает же, поиск юзера по @

Похожие вопросы

Обсуждают сегодня

И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
Ладно, ещё тупого спрошу. Код должен банально вывести значение регистра на консоль, на деле же не выводя ничего, просто оставляя нерабочую консоль (открыта, ничего не написан...
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
25
здравствуйте. пытаюсь проверить, содержится ли в десятичном представлении инта некоторая цифра. совершаю: strstr(x, "5") != NULL) получаю ошибку с фото (заведомо неработающий ...
Катя Шевчук🪇
17
Что там вообще с кроссплатформенностью?
🄼🄰🄺🅉🄰🄸
23
{ char buff = *start; *start = *end; *end = buff; } Из-за этой строчки? Что каждый символ через перем бафф? Как вариант использовать другие со...
Wenks
12
#include <stdio.h> #include <string.h> int main() { char *str = "Hello World"; char *ptr; int i = 0; for(char *end = str + strlen(str) - 1; end = str; ptr++, ...
Wenks
9
а я правильно понимаю что в винде сетевые диски выполнены на уровне юзерспейс драйвера? ну я про те которые webDAV, SMB и прочие высокоуровневые
Mixail Frolov
9
Доброй ночи. Вопрос знатокам. Имеется некая таблица, результат которой выведен в DBGrid на форме. И есть форма, с помощью которой можно как добавить запись, так и отредактиров...
Евгений
28
Кстати, а я вот тут подумал. Допустим, у нас имеется цикл который выполняет огромное количество итераций, но мы хотим, чтобы какие-то действия исполнилось только один раз. В Я...
The Bird of Hermes
23
а всё почему? потому что ассемблер в отличии от яву порождает множество пагубных привычек, среди которых например можно отметить использование глобальных переменных для всего ...
Mixail Frolov
35
Карта сайта