2016-07-05 33 views
7

Sto sviluppando la mia applicazione web. Ho questo pezzo di codice:Sta verificando il valore delle variabili SESSION classificate come business logic?

<?php 
if($_SESSION['add'] == 1) 
echo '<input type="button" name="add" id="add" value="Add" onclick="add()" >'; 
if($_SESSION['edit'] == 1) 
echo '<input type="button" name="edit" id="edit" value="Edit" onclick="edit()">'; 
?> 

In sostanza, quando l'utente accede a, ho impostato le variabili di sessione che indicano o meno che l'utente è autorizzato ad apportare modifiche e aggiungere record. Quindi quando arrivano alla home page, uso questo codice per decidere se visualizzare o meno i miei pulsanti aggiungi e modifica.

Questo codice infrange la regola della separazione logica/di presentazione? In tal caso, come posso ottenere la separazione?

Non utilizzo alcun framework web.

+2

Se add() e edit() sono solo una funzione javascript, le persone possono chiamarli anche se non hanno accesso. –

+0

quindi come dovrei risolvere questo? –

risposta

10

Mentre le condizioni in Visualizza sono perfettamente a posto, la tua vista non dovrebbe cercare di recuperare dati da qualsiasi fonte. Questo non è il suo ruolo e dovrebbe funzionare solo su dati che il tuo Controller (o Presenter, a seconda di quale sia l'architettura dell'applicazione) lo alimenta. La tua vista non dovrebbe non conoscere la logica dietro perché e quando per passare tra le modalità edit e add. Deve solo sapere come farlo quando viene ordinato. Nel tuo caso, Controller dovrebbe controllare $_SESSION e decidere quale modalità, aggiungere o modificare la tua Vista dovrebbe visualizzare e passare tale decisione alla tua Vista (ad esempio action_mode = edit|add) per l'esecuzione stupida.

PS: Consiglio di prendere l'abitudine di inserire sempre blocchi di codice (anche one-liner) nelle parentesi {, }.

+0

Sto avendo problemi a capire le tue risposte, mi dispiace. –

+2

@Connor In breve: vuoi * disaccoppiare * la tua logica di visualizzazione dalla sorgente specifica dei dati, '$ _SESSION'. In futuro potreste avere altre situazioni in cui qualcosa di diverso dal '$ _SESSION' decide sulla particolare modalità di modifica, non volete legare quella decisione direttamente alla variabile' $ _SESSION'. – deceze

Problemi correlati