2010-11-03 9 views
13

Sto prendendo in carico un progetto PHP esistente. Ho notato che lo sviluppatore precedente utilizza una pagina index.php per l'intero sito, attualmente più di 10 pagine. Questo è il secondo progetto che ho visto fatto in questo modo. Non vedo il vantaggio con questo approccio. In realtà sembra che tutto ciò complica tutto perché ora non puoi semplicemente aggiungere una nuova pagina al sito e collegarti ad essa. Devi anche assicurarti di aggiornare la pagina principale dell'indice con una clausola if per verificare il tipo di pagina e poi caricare la pagina. Sembra che se stiano solo cercando di riutilizzare un modello, sarebbe più facile usare solo include per l'intestazione e il piè di pagina e quindi creare ogni nuova pagina con quei file a cui si fa riferimento.Perché utilizzare una singola pagina index.php per l'intero sito?

Qualcuno può spiegare perché questo approccio sarebbe stato utilizzato? Questa è una forma di pattern MVC che non conosco? PHP è una seconda lingua, quindi non ho familiarità con le migliori pratiche.

Ho provato a fare alcune ricerche in Google per "singola pagina indice con php" e cose del genere ma non riesco a trovare nessun buon articolo che spiega perché questo approccio viene utilizzato. Voglio davvero buttare queste vecchie cose sul marciapiede e non continuare su questa strada, ma voglio avere qualche ragionamento valido prima di dare il suggerimento.

+0

simile a http://stackoverflow.com/questions/604046/having-a-single-entry-point-to-a-website-bad-good-non-issue – zerkms

+0

@zerkms Grazie per il punto al simile articolo. Stavo avendo il tempo più difficile di trovare qualcosa come stavo cercando. Ci darò un'occhiata. – spinon

+0

"php front controller" probabilmente porterebbe più risultati. I collegamenti di Seo-friendly sono la ragione principale secondo me –

risposta

16

Un front controller (index.php) garantisce che tutto ciò che è comune a tutto il sito (ad esempio l'autenticazione) sia sempre gestito correttamente, indipendentemente dalla pagina richiesta. Se hai 50 file PHP diversi sparsi ovunque, è difficile gestirlo. E se decidessi di cambiare l'ordine in cui vengono caricati i file della libreria comune? Se si dispone di un solo file, è possibile modificarlo in un unico punto. Se hai 50 diversi punti di ingresso, devi cambiarli tutti.

Qualcuno potrebbe dire che caricare tutte le cose comuni in continuazione è uno spreco di risorse e dovresti caricare solo i file necessari per questa particolare pagina. Vero. Ma i framework PHP di oggi sfruttano pesantemente OOP e autoloading, quindi questo "spreco" non esiste più.

Un controller anteriore rende inoltre molto facile avere URL carini nel tuo sito, perché sei assolutamente libero di utilizzare qualsiasi URL ti senti e inviarlo a qualsiasi controller/metodo di cui hai bisogno.Altrimenti sei bloccato con ogni URL che termina con .php seguito da un brutto elenco di stringhe di query, e l'unico modo per evitare questo è quello di utilizzare regole di riscrittura ancora più brutte nel tuo file .htaccess. Anche WordPress, che ha dozzine di punti di ingresso diversi (specialmente nella sezione di amministrazione), obbliga le richieste più comuni a passare attraverso index.php in modo da poter avere un formato permalink flessibile.

Quasi tutti i framework Web in altre lingue utilizzano singoli punti di ingresso o, più precisamente, un singolo script viene chiamato per avviare un processo che poi comunica con il server web. Django funziona così. CherryPy funziona così. È molto naturale farlo in questo modo in Python. L'unico linguaggio ampiamente utilizzato che consente alle applicazioni Web di essere scritte in un altro modo (eccetto quando usato come script CGI vecchio stile) è PHP. In PHP, puoi dare a qualsiasi file l'estensione .php e verrà eseguita dal server web. Questo è molto potente e rende il PHP facile da imparare. Ma una volta superato un certo livello di complessità, l'approccio del single-point-of-entry comincia a sembrare molto più attraente.

+0

Grazie per la risposta approfondita. Posso vedere un certo valore in questo e penso che probabilmente è solo più dell'implementazione che è stata fatta qui che mi infastidisce. – spinon

-1

In genere tali approcci vengono utilizzati quando il contenuto delle pagine è determinato dal contenuto del database. Quindi tutto il lavoro sarebbe svolto in un unico file. Questo è visto spesso nei sistemi CMS.

+0

Sì, potevo vederlo. Ma tutti hanno pagine di contenuto separate che sono caricate con una clausola if nella pagina dell'indice. Non riesco a vedere il valore di avere una pagina di reindirizzare tutte le richieste. Intendo quindi riutilizza un modello ma che può essere facilmente realizzato con un inclusivo. – spinon

0

Beh, se l'unica cosa che cambia è l'URL, Non sembra come se fosse fatto per qualsiasi motivo oltre fini estetici ...

+0

Non sono sicuro che io segua. Le pagine cambiano tutte in quanto ognuna ha una pagina php che viene creata. Viene semplicemente caricato nella pagina dell'indice in modo che l'URL rimanga invariato e cambino solo i parametri. – spinon

+0

Significa "esteticamente gradevole" 'mysite.com/? Page = about' vs' mysite.com/about.php' – JustcallmeDrago

0

Quanto a me - unico punto di accesso può aiutare ad avere una migliore controllo della tua applicazione: aiuta a gestire facilmente gli errori, instradare le richieste, eseguire il debug dell'applicazione.

+0

Perché instradare le richieste attraverso un singolo file? Il server Web invierà già le richieste alle singole pagine. Gli errori in genere verrebbero gestiti dalle singole pagine php che contengono il contenuto. Proprio non vedendo davvero il grande valore qui. – spinon

+0

@spinon: per me è importante almeno ;-) Ecco come mi piace sviluppare applicazioni, in base alla mia esperienza di oltre 7 anni ;-) – zerkms

+0

@spinon: supponiamo che durante la generazione della pagina il database cada. Quindi ottieni un'eccezione nel mezzo della tua pagina separata. Dove prenderai questa eccezione? ;-) – zerkms

0

Un singolo "index.php" è un modo semplice per assicurarsi che tutte le richieste alla tua applicazione scorrano attraverso lo stesso gate. In questo modo quando aggiungi una seconda pagina non devi assicurarti che bootstrapping, autenticazione, autorizzazione, registrazione, ecc siano tutti configurati - lo ottieni gratuitamente per merito del framework.

Nei moderni framework web questo potrebbe essere un front controller, ma è impossibile dirlo dato che molti codice PHP/sviluppatori soffrono di sindrome NIH.

+0

ma non puoi anche solo mettere tutto questo in un unico file include e poi avere la stessa funzionalità. Ma è un'implementazione personalizzata e non un framework. – spinon

+0

Sì, potresti, ma se ti dimentichi potresti essere nei guai. Non conosco il contesto del tuo sito o qualcosa del genere. Sto rispondendo in base alle esperienze che ho avuto lavorando su vari siti. –

1

Avere un singolo file index.php nella directory pubblica può anche proteggere contro nel caso dell'interprete php che scende. Molti framework usano il file index.php per includere il file bootstrap al di fuori della root dei documenti. Se ciò accade, l'utente sarà in grado di vedere il codice sorgente di questo singolo file invece dell'intera base di codice.

Problemi correlati