Ну, тогда не парьтесь - возьмите какой-нить js плагинчик, который ограничивает ввод данных по маске и перед валидацией данных убирайте все лишние символы кроме цифр, проверяйте на наличие лидирующей восьмёрки (если сами не захардкодите +7) с заменой на 7 и складывайте в БД только цифры. При выводе данных из БД, плагинчик сам раскидает в нужном формате цифры.
Храните номер телефона вместе с кодом страны (7).
Как Вы у себя же написали - использовать Route::get/post(). Помимо прочего, можно именовать роуты, что даст бОльшую гибкость в их использовании (при генерации ссылок). Route::model() не даст Вам этой свободы и гибкости...
Route::model() использует Model::find() для получения данных. Ввиду этого - только primary key. Разве что попробовать в модели в зависимости от request'а менять значения $primaky_key. Но это будет ну уж очень странно.
Не бойтесь писать простые роуты! Чем проще, тем меньше времени Вы теряете. Тем выше Ваша продуктивность и тем больше других интересных задач Вы встретите на своём пути! :)
ещё одно правило валидации и только: unique по таблице, где будет храниться номер, по колонке таблицы, где будет лежать...