Quando si inizia con PHP, può essere scoraggiante capire come organizzare al meglio un progetto. Se sei mai stato confuso da dove mettere le tue immagini, librerie esterne o mantenere la tua logica separata dal tuo layout, dai un'occhiata a questi suggerimenti; ti faranno andare nella giusta direzione.
Direi che la cosa numero uno nel far funzionare rapidamente il tuo progetto è avere una solida struttura di directory che puoi riutilizzare per più progetti. Se si utilizza un framework, di solito fornirà una struttura da utilizzare, ma in questo scenario stiamo lavorando su un semplice sito o app.
Probabilmente hai molta familiarità con il public_html
struttura. Questa è la radice del documento in cui tutti i tuoi file pubblici sono accessibili (/public_html/page.php
è accessibile a example.com/page.php
).
Il risorse
la directory dovrebbe contenere tutte le librerie di terze parti, le librerie personalizzate, le configurazioni e qualsiasi altro codice che funge da risorsa nel progetto.
Come designer e sviluppatori il nostro obiettivo principale è quello di fare il minor lavoro possibile. Un modo per raggiungere questo obiettivo è con i file di configurazione. Per avere una migliore idea di cosa dovrebbe avere il file di configurazione, prova questo esempio.
array ("db1" => array ("dbname" => "database1", "username" => "dbUser", "password" => "pa $$", "host" => "localhost"), "db2 "=> array (" dbname "=>" database2 "," username "=>" dbUser "," password "=>" pa $$ "," host "=>" localhost "))," urls "=> array ("baseUrl" => "http://example.com"), "paths" => array ("resources" => "/ path / to / resources", "images" => array ("contenuto" = > $ _SERVER ["DOCUMENT_ROOT"]. "/ Images / content", "layout" => $ _SERVER ["DOCUMENT_ROOT"]. "/ Images / layout"))); / * In genere inserirò quanto segue in un file bootstrap o in qualche tipo di file di installazione dell'ambiente (codice che viene eseguito all'inizio di ogni richiesta di pagina), ma funzionano altrettanto bene nel file di configurazione se è in php (alcune alternative php sono file xml o ini). * / / * La creazione di costanti per percorsi molto usati rende le cose molto più semplici. ex. require_once (LIBRARY_PATH. "Paginator.php") * / defined ("LIBRARY_PATH") o define ("LIBRARY_PATH", realpath (dirname (__ FILE__). '/ library')); definito ("TEMPLATES_PATH") o define ("TEMPLATES_PATH", realpath (dirname (__ FILE__). '/ templates')); / * Segnalazione di errori. * / ini_set ("error_reporting", "true"); error_reporting (E_ALL | E_STRCT); ?>
Questo è un file di configurazione drop-in di base. Un array multidimensionale funge da struttura flessibile per l'accesso a vari elementi di configurazione come le credenziali del database.
L'uso delle costanti per i percorsi comunemente usati include dichiarazioni (richiedere
o includere
) un gioco da ragazzi, e se il percorso dovesse cambiare, basterà aggiornarlo in un unico punto.
Utilizzando diversi file di configurazione per più ambienti è possibile avere impostazioni rilevanti a seconda dell'ambiente corrente. Ciò significa che se si utilizzano credenziali di database diverse o percorsi diversi per ciascun ambiente, impostando i rispettivi file di configurazione si garantisce che il codice funzionerà senza problemi durante l'aggiornamento del sito live. Ciò consente anche di avere diverse impostazioni di segnalazione degli errori in base all'ambiente corrente. Mai e poi mai visualizzare errori sul tuo sito live! La visualizzazione di errori sul sito live potrebbe esporre dati sensibili agli utenti (come le password).
I modelli riutilizzabili sono un altro grande risparmio di tempo. Ci sono alcune grandi librerie per i template (come Smarty), e incoraggio sempre ad usare una libreria simile piuttosto che reinventare la ruota. Queste librerie offrono molte funzionalità (come i metodi di supporto per la formattazione della valuta e l'offuscamento degli indirizzi di posta elettronica). Poiché si tratta di un sito semplice, tuttavia, non ci prendiamo il tempo necessario per impostare la libreria e utilizzeremo i modelli di base più basilari. Raggiungiamo questo obiettivo includendo sezioni o moduli comuni nelle nostre pagine del sito; in questo modo se vogliamo modificare qualcosa nell'intestazione, come aggiungere un collegamento alla navigazione globale, viene propagato in tutto il sito.
Sito semplice Sito semplice
- Casa
- articoli
- Portafoglio
- PHP
- HTML
- CSS
Contenuto di piè di pagina ...
Diciamo che mettiamo tutti i nostri componenti di layout (header, footer, rightPanel) nella nostra directory delle risorse sotto i template.
Mentre questo modello di base ti dà un ottimo inizio, puoi fare molto di più. Ad esempio, è possibile creare una classe o funzioni che includono tutti i file modello e accettare un file di contenuto come argomento per il rendering all'interno del layout. In questo modo non è necessario continuare a includere i file modello in ogni pagina del tuo sito, ma piuttosto astrarre quella logica che significa ancora meno lavoro lungo la strada. Ti mostrerò un rapido esempio.
0) foreach ($ variabili come $ chiave => valore $) if (strlen ($ chiave)> 0) $ $ chiave = $ valore; require_once (TEMPLATES_PATH. "/header.php"); eco "\ n "." \ t\ n "; require_once (TEMPLATES_PATH." /footer.php ");?>\ n "; if (file_exists ($ contentFileFullPath)) require_once ($ contentFileFullPath); else / * Se il file non viene trovato, l'errore può essere gestito in molti modi. In questo caso includeremo solo un errore template. * / require_once (TEMPLATES_PATH. "/error.php"); // close content div echo "\ t\ n "; require_once (TEMPLATES_PATH." /rightPanel.php "); // close container div echo"
Questo presuppone che tu abbia un file chiamato home.php nella tua directory templates che funge da modello di contenuto.
$ setInIndexDotPhp); renderLayoutWithContentFile ("home.php", $ variabili); ?>
Home Page
Maggiore separazione tra logica e vista (php e html). Separare le preoccupazioni come questo rende più pulito il codice, e il lavoro del progettista o dello sviluppatore diventa più facile in quanto funzionano principalmente con il rispettivo codice.
L'incapsulamento della logica del modello in una funzione consente di apportare modifiche al modo in cui il modello viene visualizzato senza aggiornarlo in ogni pagina del sito.
Sui sistemi basati su Unix (os x, linux) c'è una piccola e bella funzionalità chiamata symlinks (link simbolici). I collegamenti simbolici sono riferimenti a directory o file effettivi sul filesystem. Questo è davvero ottimo per quando hai una risorsa condivisa, come una libreria utilizzata tra più progetti. Ecco alcune cose concrete che puoi fare con i link simbolici:
Hai due versioni della tua directory delle risorse. Quando aggiorni il tuo server live puoi caricare i tuoi ultimi file in una directory arbitraria. Basta puntare il link simbolico a questa nuova directory aggiornando istantaneamente il tuo codice base. Se qualcosa va storto puoi tornare istantaneamente alla precedente (funzionante) directory.
Le risorse condivise sono facilmente gestibili tramite symlink. Supponiamo che tu abbia una libreria personalizzata su cui hai lavorato, qualsiasi aggiornamento alla libreria che crei in un progetto sarà immediatamente disponibile in un altro.
I collegamenti simbolici o i collegamenti software fungono da riferimenti ai percorsi completi sul filesystem. È possibile utilizzare i collegamenti simbolici in più posizioni e il filesystem li tratta come se fossero il vero file o la directory a cui fanno riferimento. I collegamenti fissi d'altra parte sono puntatori a un file sul disco (si pensi alle scorciatoie in Windows); ti portano nella posizione attuale del file.
Ci sono alcune cose che dovresti prendere in considerazione quando usi i collegamenti simbolici. La configurazione del tuo server deve essere configurata per seguire i collegamenti simbolici. Per Apache questo è fatto nel file httpd.conf. Trova il blocco Directory e assicurati che Options FollowSymLinks sia presente. In caso contrario, aggiungerlo e quindi riavviare Apache.
Opzioni FollowSymLinks AllowOverride Nessuno
Ci sono 2 modi per creare collegamenti simbolici in OS X:
Tramite la riga di comando, navigare (cd, cambia directory) nella directory in cui si desidera creare il collegamento simbolico, quindi utilizzare il seguente comando:
$: ln -s / path / to / actual / dir targetDir
Quindi se la nostra biblioteca personalizzata vive in ~ / Siti / librerie / myCustomLibrary
faremo cd su dove vogliamo usare quella libreria cd ~ / Sites / mySite / resources / library
e inserisci:
$: ln -s ~ / Sites / libraries / myCustomLibrary myCustomLibrary
Si noti che questo metodo dovrebbe funzionare in tutti i sistemi operativi basati su Unix.
L'alternativa è attraverso il finder. Tenendo premuto alt + cmd mentre si fa clic e si trascina un file, viene creato un collegamento simbolico (o un alias in os x) che punta al file.
Per ottenere questo risultato in Windows è necessario utilizzare il comando mklink nel prompt dei comandi:
C: \ mklink / D C: \ libraries \ myCustomLibrary C: \ Users \ derek \ Sites \ mySite \ resources \ library \ myCustomLibrary
Questi suggerimenti sono pensati per i principianti o coloro che creano siti o applicazioni semplici. Idealmente per applicazioni o siti di grandi dimensioni, ti consigliamo di considerare qualcosa di più avanzato come l'architettura MVC e la programmazione orientata agli oggetti. Ti incoraggio a esaminare questi aspetti una volta che hai bagnato i piedi e senti che hai superato la maggior parte dei passaggi sopra descritti. Ho deciso di non considerare il controllo del codice sorgente in quanto è un argomento piuttosto ampio, ma questi suggerimenti dovrebbero aiutarti a organizzare i tuoi file per un controllo del codice più semplice se desiderato (suggerimento: immagazzinare cose come le immagini di layout nella directory delle risorse e collegarle in modo simbolico al tuo / Public_html / img
dir). Sicuramente cerca di usare il controllo del codice sorgente, come subversion o git per tutti i tuoi progetti.
Spero che questi suggerimenti siano utili quando avvii il tuo prossimo progetto PHP. Grazie!