Gestione errori MVC PHP, visualizzazione visualizzazione e autorizzazioni utente

1

Sto costruendo un pannello di moderazione da zero in un approccio MVC e molte domande sono spuntate durante lo sviluppo. Mi piacerebbe sentire dagli altri come gestiscono queste situazioni.

  1. Gestione degli errori

    Dovresti gestire un errore nel metodo della classe o il metodo restituire comunque qualcosa e tu gestisci l'errore nel controller? Che dire delle eccezioni PDO, come gestirle? Ad esempio, supponiamo di avere un metodo che restituisce true se l'utente esiste in una tabella e false se non esiste. Cosa restituisci nella dichiarazione di cattura? Non puoi semplicemente restituire falso perché il controller assume che tutto va bene mentre la verità è che qualcosa deve essere seriamente rotto. La visualizzazione dell'errore dal metodo interrompe completamente l'intero progetto. Forse un reindirizzamento della pagina all'interno del metodo?

  2. Il modo corretto di mostrare una vista

    Il controller adesso assomiglia a qualcosa del tipo:

    include('view/header.php');
    if ($_GET['m']=='something') include('view/something.php');
    elseif ($_GET['m']=='somethingelse') include('view/somethingelse.php');
    include('view/foter.php');
    

    Ogni vista controlla anche se è stata inclusa dalla pagina dell'indice per impedirne l'accesso diretto. C'è un file di visualizzazione per ogni diverso corpo del documento. È questo modo di includere viste diverse ok o esiste un modo più corretto?

  3. Gestione dei diritti utente

    Ogni utente ha i suoi diritti, quello che può vedere e quello che può fare. Quale parte del sistema dovrebbe verificare che l'utente abbia il permesso di vedere la vista, il controller o la vista stessa? In questo momento eseguo controlli delle autorizzazioni direttamente nella vista perché ogni vista può contenere diversi moduli che richiedono autorizzazioni diverse e avrei bisogno di creare un file separato per ognuno di essi se fosse stato inserito nel controller. Devo anche ricontrollare le autorizzazioni ogni volta che un modulo viene inviato perché i dati del modulo possono essere facilmente falsificati. La verità è che tutto questo controllo dei permessi e la convalida degli input trasforma il controller in un enorme cluster if / then / else.

    Mi sento come il 90% delle volte che eseguo controlli degli errori / permessi / convalide e molto poco della logica effettiva. È normale anche per i framework più diffusi?

posta cen 21.11.2012 - 06:38
fonte

1 risposta

2

Non esiste un unico approccio corretto ai tuoi problemi, anche all'interno del pattern MVC, quindi non esiste una risposta semplice alle tue domande.

1 Error handling

Se si utilizza il PDO, è possibile modificare la gestione degli errori impostando PDO :: ATTR_ERRMODE in modo da non dover utilizzare eccezioni ma indipendentemente dal modo in cui vengono restituiti gli errori, è responsabilità dei programmatori gestirli correttamente. Se il metodo restituisce false se l'utente non esiste, il controller dovrebbe verificare quale valore è stato restituito. Non esiste una cosa come "controller assume" significa solo che il programmatore ha assunto e non ha controllato il valore restituito.

Ci sono diversi errori che dovrebbero essere gestiti in modo diverso, alcuni potrebbero richiedere solo messaggi di errore, alcuni potrebbero essere critici (come nessuna connessione db). Puoi usare messaggi, viste o controller aggiuntivi per gestire gli errori.

2 The proper way to show a view

Il codice dell'esempio verrebbe generalmente gestito dal layout (intestazione, piè di pagina, posizionamento di elementi diversi) e dal controller (utilizzando visualizzazioni diverse a seconda della richiesta). Non è una buona idea usare direttamente 'include' piuttosto che racchiuderlo nel metodo. Puoi anche creare una classe di visualizzazione che sarebbe responsabile della gestione delle viste. vista! = .phtml

3 Managing user rights

Nel pattern MVC usato per le applicazioni web di solito c'è un "front controller" aggiuntivo e il controllo dei permessi verrà gestito lì. È necessario verificare l'autorizzazione per ogni richiesta e ogni richiesta richiederà l'accesso a un controller / metodo specifico se si implementa ACL corretto dovrebbe risolvere tutti i problemi con i diritti dell'utente.

    
risposta data 21.11.2012 - 13:32
fonte

Leggi altre domande sui tag