Penso che dovresti convalidare i tuoi modelli in ... validatori di modelli;)
Nella mia architettura attuale ogni modello ha una classe di validatore associata, che contiene una logica di validazione. (Anche i controllori hanno i validatori, ma non è questo il punto). Questo perché la logica di convalida a volte può essere abbastanza complessa, specialmente quando i modelli ricevono stati.
Per convalidare un modello, passo il risultato di $ model- > getAttributes () a un validatore. La parte, responsabile della creazione di un validatore e del suo superamento, ora fa parte della mia classe BaseModel personalizzata.
L'ho configurato in modo che le esecuzioni di validazione avvengano quando il modello viene salvato. Se il modello non è valido, si verifica un'eccezione. Pertanto, il controller o il servizio, salvando il modello, sono responsabili della sua convalida.
Il risultato della convalida è vuoto quando la convalida ha esito positivo o un hash di errori ('fieldName1' = > ErrorsArray1). ErrorsArray è un MessageBag standard di Laravel, con il quale è facile rendere gli errori all'utente.
Quindi, per modellare / controllare non importa se l'Utente non può votare affatto, o sarà in grado di votare di nuovo in 1 ora. Il validatore del modello crea un messaggio di errore (cannot_vote o cannot_vote_tmp) e lo invia solo al controllore, che lo passa alla vista. Visualizza traduce il messaggio, se necessario, e lo presenta all'utente.
Attualmente gli errori vengono enumerati e presentati all'utente utilizzando un semplice elenco accanto al campo di input a cui è correlato. Ma questa logica può essere estesa. Se diventa abbastanza complesso, puoi posizionarne un po 'in un ViewComposer, che prenderà degli errori dal controller, calcolerà alcuni stati da loro e passerà questo stato in una vista liberandola da calcoli complessi.