New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
the system of a filtration of parameters of model for restful is added #34
Conversation
Хм на самом деле это чуть лишнее:
protected function asObject(...$params) //PHP 5.5+
{
$object = parent::asObject(...$params);
unset($object->passwordHash);
return $object;
}
Словом я веду к тому что филтрировать поля надо уже на уровне презентации, или перегрузкой метода или созданием спецыального "getPublicObject" метода а не харкодом полей в сущности и переключении булевым флагом. Словом я спрошу в чате что он думают, но мое имхо что сунуть это в апи ОРМ не особо надо. |
У меня много данных с которыми я работаю и которые мне не нужно отдавать на RESTful. /api/post/1?preload[]=user.tokens Конечно, я ограничиваю такие запросы. Но вероятность не уследить огромная. Лучше при создании модели и прописать hidden, как это сделано в laravel. Моделей в которых нужно скрывать данные много. И нет, не только из-за passwordHash, а еще и из-за email, login, phone ... Так сказать скрытие личной информации, если пользователь не разрешил отображение |
Именно поэтому тебе надо сделать фильтр доступных полей, а не спратянных. Так гораздо понятнее, так как у тебя сразу есть список полей которые пользователь будет видеть. К тому же тогда шораздо труднее допустить ошыбку, добавив поле в базу но не добавиви его в список спрятанных. К тому же логика спрятанноси может быть разная, например админ видит больше полей чем единствнный пользователь. В твоем случае достаточно просто перегоурзить asObject как я выше сделал. |
Согласен с @dracony - перегрузка метода, по сути, то же самое что и определение списка hidden, но с возможностью легко добавить дополнительную логику скрытия/раскрытия в нужный момент. А этот момент всегда наступает. |
@rez1dent3, будешь смеяться, но твои комменты в коде гораздо нужнее и ценнее :) Кстати, filter - это как раз то, как можно реализовать трэйт. Назвать его, скажем, |
Table users (id, login, passwordHash)
my model
return from processor.
result for resuful api
without filter
return from processor.
result for resuful api
ЗЫ, Аналог: https://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json