laravel-comments
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.
Оу, проглядел код — виртуальные атрибуты это крутая и полезная фича. Мне как то в голову этот момент просто не приходил. Спасибо.
Чуть позже подробнее просмотрю код, перепроверю и добавлю в основную ветку.
Возможно, проверка чуть затянется до окончания праздников в январе.
АПД. Хотя введение виртуальных аттрибутов сильно усложнит рефакторинг кода, по хорошему нужно подумать как ввести нативную поддержку во все хелперы и сервисы.
Возможность искать в таблице comments по commentable_type/commentable_id как через дефолтные методы с возможность передать любой аргумент (where('commentable_type', $type) ), так и с поддержкой виртуальных выглядит как огромный костыль с огромным количеством возможных выстрелов в голову.
По хорошему стоит ввести скоуп/как то сделать единую точку ввода и поиска. Как мне кажется.
Мне на почту коммент пришёл, зачем слэш в начале. Так он же в оригинальной вьюшке добавляется. get_class
же возвращает имя класса без первого слэша. Поправил шаблон формы, а то забыл там убрать первый слэш.
Вроде же сейчас и так есть одна (на самом деле две) точка - контроллер. Но может имеет смысл в будущем использовать не напрямую вызов типа Model::firstOrFail
, а какую-нибудь обёртку, типа:
CommentService::getModel($modelPath)->getModelRecord()
.
Да, слеш дублировался, а про поведение get_class я забыл. Потом комментарий удалил.
Думаю, имеет смысл сделать переопределение названия модели внутри самой модели в виде метода, а не в конфиге.
Сделать метод обязательным добавив в интерфейс ICommentable, и реализовав в трейте по умолчанию в виде возвращения get_class.
А как CommentsController
узнает, какое оригинальное название класса, когда ему придёт FakeModelName
?
Я тоже думал, что можно в модели имя менять, но нужен же еще обратный поиск модели по поддельному имени. Или в конфиге перечислять модели, по которым контроллер будет ходить и искать где упоминается FakeModelName, но этот вариант еще хуже :)
Да, не подумал.
Варианты с бд сразу можно откинуть в связи с плохой производительностью/недальновидность.
В теории ещё возможно вынести связь куда то в код в виде массива (в модель comment?) по аналогии с связками событий-слушателей в ларавел.
Но это... плюс только в возможности указывать путь до класса в более явном виде (::class) (что не так уж и плохо)
А смысл этого всего? Этот функционал нужен 1% проценту пользователей, а у них и с конфигом проблем не возникнет. PS. Меня вот, честно говоря, раздражает, когда кастомизация размазана по куче мест и не всегда очевидных.
Просто рассуждение о возможной реализации)
Просто думаю что алиасы для моделей стоит точно реализовать — не нравится мне что пути классов доступны из вне.
Ну как, не созрел еще?
@ivan-cc после нового года появились личные проблемы, из-за которых опенсорс, да и в целом работа с кодом отошли на десятые—сотые планы.
PS К слову о скрытии названия и пути модели — вроде бы встроенное шифрование ларавел не обсуждалось https://laravel.com/docs/7.x/encryption ? Как мне кажется было бы проще использовать его, чем биндить данные вручную через конфиг.
Надеюсь личные проблемы исправятся.
Так шифрование же тоже надо прикручивать. Одобрил бы текущий PR, уже прогресс бы был :)
Я помню что я хотел переписать функциональность под себя и свой код стайл, поэтому пр и не принял.
Пока что добавил шифрование через встроенную функцию ларавел. Вместо commentable_type и commentable_id при сохранении/получении комментариев через API нужно использовать commentable_encrypted_key. В ридми добавлен раздел с руководством по миграции.