Зря я написал EntityDtoLoader?
Кто знает, вероятно зря.
Или как лучше?
Сложно сказать, пока что я не совсем понимаю, зачем вам в принципе DTO?
У вас экшн знает какие данные из Request обрабатывать - вытягивайте их явно и проверяйте, да кода больше, но на лонг ране это очень упрощает жизнь, вы явно видите где и что есть.
Дальше, если нужно запихиваете куда нужно.
Есть еще вариант - под каждый экшн сделать отдельный класс *Form / *Message, который на вход получает Request, прям в конструкторе вытягивает данные, валидирует их и запихивает к себе в приватные свойства, преобразовав типы. Наружу предоставляются геттеры.