Organizza il tuo prossimo progetto PHP nel modo giusto

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.

Dettagli dell'esercitazione

  • Programma: PHP / Progetti
  • Versione: 1
  • Difficoltà: Facile
  • Tempo di completamento stimato: 20 minuti

Struttura della directory

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.

Abbattersi

  • 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).

    • img - Tutti i tuoi file di immagine. Ho deciso di dividere le immagini dei contenuti dalle immagini di layout.
    • css - Tutti i tuoi file CSS.
    • js - Tutti i tuoi file javascript.
  • 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.

    • config.php - File di configurazione principale. Dovrebbe memorizzare le impostazioni del sito.
    • libreria - Posizione centrale per tutte le librerie personalizzate e di terze parti.
    • templates - Componenti riutilizzabili che compongono il tuo layout.

Il file di configurazione

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.

  • db - Memorizza le credenziali del database o altri dati relativi ai tuoi database.
  • percorsi - Percorsi comunemente utilizzati per varie risorse per il tuo sito.
    • log files
    • caricare le directory
    • risorse
  • urls: l'archiviazione degli URL può essere molto utile quando si fa riferimento a risorse remote in tutto il sito.
  • email - Memorizza le email di debug o di amministrazione da utilizzare quando si gestiscono errori o nei moduli di contatto.

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.

Utilizzo di diversi file di configurazione per ambienti multipli

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).

Lo schema

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.

header.php

    Sito semplice   

Sito semplice

  • Casa
  • articoli
  • Portafoglio

rightPanel.php

  • PHP
  • HTML
  • CSS

footer.php

Contenuto di piè di pagina ...

index.php

Diciamo che mettiamo tutti i nostri componenti di layout (header, footer, rightPanel) nella nostra directory delle risorse sotto i template.

 

Prenderlo ulteriormente

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.

/resources/library/templateFunctions.php

 0) foreach ($ variabili come $ chiave => valore $) if (strlen ($ chiave)> 0) $ $ chiave = $ valore;  require_once (TEMPLATES_PATH. "/header.php"); eco "
\ n "." \ t
\ 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"
\ n "; require_once (TEMPLATES_PATH." /footer.php ");?>

index.php

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.php

 

Home Page

I vantaggi di questo metodo includono:

  • 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.

link simbolici

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.

Utilizzo dei collegamenti simbolici

Collegamenti simbolici o hardlink

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 

Creazione di collegamenti simbolici in OS X

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.

Creazione di collegamenti simbolici in Windows

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

Sommario

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!

risorse

  • Smarty Templating Engine
  • Architettura Multitier
  • MVC
  • Programmazione orientata agli oggetti
  • Subversion For Designers (controllo della versione)
  • link simbolici
  • hardlinks
  • Seguici su Twitter o iscriviti al feed RSS di NETTUTS per ulteriori tuts e articoli di sviluppo web giornalieri.