Sto progettando un semplice sistema di ticketing in Laravel 4. Il sistema consentirà semplicemente a un utente di creare un ticket e un amministratore di rispondere.
L'utente sarà in grado di:
- Visualizza un elenco di i suoi biglietti.
- Crea un nuovo ticket.
- Visualizza le risposte a uno dei i suoi ticket.
- Aggiungi una risposta a uno dei i suoi ticket.
- Chiudi uno dei suoi ticket.
- Esegui le attività sopraindicate tramite l'URL www.example.com/ supporto
L'amministratore sarà in grado di:
- Visualizza un elenco di tutti biglietti
- Impossibile creare un nuovo ticket.
- Visualizza le risposte a qualsiasi ticket .
- Aggiungi una risposta a qualsiasi biglietto
- Chiudi qualsiasi ticket .
- Esegui le attività sopraindicate tramite l'URL www.example.com/ admin / support
In altre parole, un utente e un amministratore possono eseguire funzionalità molto simili, ma diverse. Quali sono i modi in cui posso progettare questo sistema per ridurre la quantità di copia e incolla da eseguire?
Finora, ho trovato due possibilità.
-
Crea due serie di rotte con due controller: uno per l'utente e uno per l'amministratore. Copia e incolla la maggior parte della logica tra i controller, ma modifica alcune variabili in modo che gli utenti possano vedere solo i propri ticket. Entrambi i controller condividono le stesse visualizzazioni e il medesimo modello. Aggiungi un ulteriore controllo nelle Visualizzazioni in modo che l'amministratore non veda un pulsante per creare un nuovo ticket.
Il lato negativo di questo è che devo inserire la logica nelle viste per nascondere alcune cose dall'amministratore e altre cose da parte dell'utente. Sto anche copiando e incollando il codice tra i controller.
-
Crea due serie di Rotte ma usa lo stesso Controller. Utilizzare le istruzioni if nel Controller per mostrare Visualizzazioni diverse a seconda che si tratti di un Utente o di un Amministratore.
Tuttavia, ora sto copiando e incollando il codice tra le viste. Avere due diversi set di logica nello stesso controller potrebbe anche creare confusione.
C'è un modo migliore per farlo?