laravel-comments icon indicating copy to clipboard operation
laravel-comments copied to clipboard

New function - New functionality - the ability to hide the real name of the model class and the real id of the record.

Open ivan-cc opened this issue 5 years ago • 11 comments

ivan-cc avatar Dec 28 '19 19:12 ivan-cc

Оу, проглядел код — виртуальные атрибуты это крутая и полезная фича. Мне как то в голову этот момент просто не приходил. Спасибо.

Чуть позже подробнее просмотрю код, перепроверю и добавлю в основную ветку.

Возможно, проверка чуть затянется до окончания праздников в январе.

АПД. Хотя введение виртуальных аттрибутов сильно усложнит рефакторинг кода, по хорошему нужно подумать как ввести нативную поддержку во все хелперы и сервисы.

Возможность искать в таблице comments по commentable_type/commentable_id как через дефолтные методы с возможность передать любой аргумент (where('commentable_type', $type) ), так и с поддержкой виртуальных выглядит как огромный костыль с огромным количеством возможных выстрелов в голову.

По хорошему стоит ввести скоуп/как то сделать единую точку ввода и поиска. Как мне кажется.

iooe avatar Dec 29 '19 00:12 iooe

Мне на почту коммент пришёл, зачем слэш в начале. Так он же в оригинальной вьюшке добавляется. get_class же возвращает имя класса без первого слэша. Поправил шаблон формы, а то забыл там убрать первый слэш.

Вроде же сейчас и так есть одна (на самом деле две) точка - контроллер. Но может имеет смысл в будущем использовать не напрямую вызов типа Model::firstOrFail, а какую-нибудь обёртку, типа: CommentService::getModel($modelPath)->getModelRecord().

ivan-cc avatar Dec 29 '19 10:12 ivan-cc

Да, слеш дублировался, а про поведение get_class я забыл. Потом комментарий удалил.

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

Сделать метод обязательным добавив в интерфейс ICommentable, и реализовав в трейте по умолчанию в виде возвращения get_class.

iooe avatar Dec 29 '19 10:12 iooe

А как CommentsController узнает, какое оригинальное название класса, когда ему придёт FakeModelName?

Я тоже думал, что можно в модели имя менять, но нужен же еще обратный поиск модели по поддельному имени. Или в конфиге перечислять модели, по которым контроллер будет ходить и искать где упоминается FakeModelName, но этот вариант еще хуже :)

ivan-cc avatar Dec 29 '19 10:12 ivan-cc

Да, не подумал.

Варианты с бд сразу можно откинуть в связи с плохой производительностью/недальновидность.

В теории ещё возможно вынести связь куда то в код в виде массива (в модель comment?) по аналогии с связками событий-слушателей в ларавел.

Но это... плюс только в возможности указывать путь до класса в более явном виде (::class) (что не так уж и плохо)

iooe avatar Dec 29 '19 11:12 iooe

А смысл этого всего? Этот функционал нужен 1% проценту пользователей, а у них и с конфигом проблем не возникнет. PS. Меня вот, честно говоря, раздражает, когда кастомизация размазана по куче мест и не всегда очевидных.

ivan-cc avatar Dec 29 '19 11:12 ivan-cc

Просто рассуждение о возможной реализации)

Просто думаю что алиасы для моделей стоит точно реализовать — не нравится мне что пути классов доступны из вне.

iooe avatar Dec 29 '19 11:12 iooe

Ну как, не созрел еще?

ivan-cc avatar Mar 07 '20 17:03 ivan-cc

@ivan-cc после нового года появились личные проблемы, из-за которых опенсорс, да и в целом работа с кодом отошли на десятые—сотые планы.

PS К слову о скрытии названия и пути модели — вроде бы встроенное шифрование ларавел не обсуждалось https://laravel.com/docs/7.x/encryption ? Как мне кажется было бы проще использовать его, чем биндить данные вручную через конфиг.

iooe avatar Mar 16 '20 04:03 iooe

Надеюсь личные проблемы исправятся.

Так шифрование же тоже надо прикручивать. Одобрил бы текущий PR, уже прогресс бы был :)

ivan-cc avatar Mar 16 '20 09:03 ivan-cc

Я помню что я хотел переписать функциональность под себя и свой код стайл, поэтому пр и не принял.

Пока что добавил шифрование через встроенную функцию ларавел. Вместо commentable_type и commentable_id при сохранении/получении комментариев через API нужно использовать commentable_encrypted_key. В ридми добавлен раздел с руководством по миграции.

iooe avatar Mar 16 '20 13:03 iooe