Domanda

Non sono sicuro di come dovrei esprimerlo, ma ci proverò.
Di recente ho iniziato a codificare il mio portafoglio in PHP orientato agli oggetti e mi chiedo se è secondo le migliori pratiche utilizzare una singola pagina in cui il contenuto cambia in base ai dati SQL e alla variabile $ _GET?

Se sì / no, perché?

Modifica: dai un'occhiata al mio prossimo post, dettagli più approfonditi.

È stato utile?

Soluzione

Stai chiedendo di utilizzare il modello del front controller, in cui un singolo file soddisfa tutte le tue richieste? Spesso questo viene fatto con un index.php e mod_rewrite che ottengono tutte le richieste con il resto dell'URL che gli viene assegnato come parametro nella stringa di query.

http://www.onlamp.com /pub/a/php/2004/07/08/front_controller.html

Tenderei a raccomandare questo schema da usare per le applicazioni, perché ti dà un unico posto per gestire cose come l'autenticazione, e spesso dovrai integrare le cose a un livello più stretto in cui avere nuove funzionalità sono classi che sono registrate con il controller tramite qualche meccanismo ha molto senso.

Le preoccupazioni relative agli URL citati da altri non sono molto precise, perché non esiste una relazione reale tra la struttura degli URL e la struttura dei file, a meno che non si utilizzino antiche tecniche di costruzione di siti Web. Una buona parte della funzionalità di Apache si basa sul concetto che la struttura di file / directory e la struttura dell'URL sono concetti distinti (modulo alias, modulo di riscrittura, negoziazione del contenuto, ecc.)

Altri suggerimenti

  • Non scalabile
  • Codice difficile da gestire
  • Il parser deve analizzare tutto
  • Esempio perfetto di odore di codice
  • Un errore provoca l'arresto anomalo dell'intero sito

Se intendi una singola pagina di destinazione (ad esempio index.php) che utilizza quindi variabili di sessione ecc. per capire quale codice debba essere incluso, allora sì, questa è una tecnica spesso utilizzata.

Modifica: e con quanto sopra intendo ciò che Daniel Papasian spiega in dettaglio nel suo eccellente post

Se intendi mettere tutto il tuo HTML, SQL e PHP in un singolo file, allora no, per i motivi indicati da GateKiller.

Il file di pagina actaul dovrebbe contenere solo ciò che differisce da quella pagina da un normale " pagina " sul tuo sito (ad esempio il titolo della pagina, la pagina dell'indice potrebbe contenere un codice per ottenere le ultime notizie, ecc.). Tutto ciò che è (o può) essere utilizzato in più di un luogo, dovrebbe essere spostato in file php esterni e incluso. Esempi sono:

  • Informazioni sul database (password, nome utente, ecc.)
  • Intestazione / piè di pagina
  • Codice di accesso

Questo rende il codice molto più facile da gestire. Ad esempio, se si modifica la password del database, è solo un file che deve essere aggiornato o se si è deciso di aggiungere un banner all'intestazione, di nuovo solo una pagina non tutte le pagine che devono essere modificate.

Inoltre, l'aggiunta di nuove funzionalità richiede molto meno lavoro, ad esempio una nuova pagina potrebbe essere semplicemente:

<?php
require ('config.php')
require ('start.php')
require ('header.php')
//custom page stuff
require ('footer.php')
?>

o l'aggiunta del login automatico tramite i cookie, è una semplice modifica alla funzione Login () (creazione di un cookie) e start.php (verifica del cookie + chiamata Login ()).

Inoltre puoi facilmente trasferire questi file ad altri progetti in futuro.

Tutto ciò che gatekiller ha menzionato + non puoi nemmeno utilizzare l'associazione tardiva.

  • Codice difficile da gestire

Se si utilizza il controllo versione, sarà MOLTO più difficile ripristinare tutte le modifiche che potrebbero essere avvenute su una singola " pagina " del tuo sito. Dal momento che dovresti ricollegarti per tutto ciò che potrebbe essere venuto dopo

Non è adatto ai motori di ricerca se non si utilizza la riscrittura mod

Tendo a non essere d'accordo con la maggior parte: se il tuo sito è gestito da un CMS personalizzato o qualcosa di simile, non c'è motivo di non utilizzare una pagina.

Ho fatto una cosa simile con un CMS che ho scritto qualche tempo fa. Tutti i client avevano un'unica pagina default.asp che richiedeva al database temi, contenuti, allegati e autorizzazioni dei membri. Per apportare una modifica, l'ho appena apportata una volta e l'ho copiata sugli altri miei clienti se la modifica lo richiedeva.

Questo ovviamente non funzionerebbe nella maggior parte degli scenari. Se hai un sito web che fa molte cose DIVERSE (il mio cms ha appena ripetuto determinate funzioni durante il caricamento della pagina), allora più pagine sono davvero l'unica strada da percorrere.

Per quelli di voi che sono interessati, esiste un framework che utilizza questo modello esatto. Originariamente per ColdFusion. Esiste ancora una comunità per questa metodologia, la versione 5.5 è stata rilasciata circa un anno fa (dicembre 2007).

sito FuseBox Framework

voce di Wikipedia

Questo screendump e la seguente spiegazione potrebbero dare un'idea migliore dell'aspetto del mio codice al momento.

Struttura dei file

Uso lo stesso modello di quello menzionato da "Internet Friend", Daniel Papasian e pochi altri; Front Controller.

La mia pagina indice è simile a questa.

require_once 'config.php';
require_once 'class_lib/template.php';

$template = new template($config);
$template->dataQuery();
$template->pageCheck();
$template->titleAssembly();
$template->cssAssembly();
$template->metaAssembly();
$template->menuAssembly();
$template->content();
echo $template->publish();

Il costrutto di classe apre il file modello principale e lo carica in una variabile che ogni metodo può manipolare sostituendo i tag con il codice generato. Gli URL brutti non sono un problema dato che userò mod_rewrite per ripulirlo.
Tuttavia, Papasian ha ragione, questo metodo sarebbe più adatto per applicazioni basate sul web e simili.

Mi scuso per non essere molto specifico con la mia domanda in primo luogo.
Inoltre, un grande "grazie" a tutti coloro che hanno lasciato cadere alcune righe per dare una mano.

Uso spesso un file php senza l'estensione .php (ad es. sito) e aggiungo

<Files site>
ForceType application/x-httpd-php 
</Files>

al .htaccess che rende apache interpreta il file come un file php.

Puoi analizzare il file all'interno dell'URL: http: // www. yourdomain.com/site/var1/var2/var3

Usa

$var_array = explode("/",$_SERVER['REQUEST_URI']); 
$var1 = $var_array[1];
$var2 = $var_array[2];
$var3 = $var_array[3];

per ottenere i var. In questo modo puoi usare un singolo file con searchengingfriendlyurls senza modrewrite.

re: URL e struttura del file

Ho convertito un sito in cui tutto il contenuto era in un database e ho avuto accesso con il modello index? p = 434. L'utilizzo del database non ha comportato alcun vantaggio e il sito è stato fonte di confusione per le persone che hanno dovuto aggiungere contenuti poiché hanno dovuto modificare i contenuti con il browser e le pagine erano solo numeri.

Ho estratto tutto il contenuto e l'ho messo in file separati. Ognuno aveva un nome ragionevole ed era organizzato in cartelle. Ogni file era simile al seguente:

require('sitelib');
do_header('about', 'About Us');
// content here
do_footer();

Al cliente è piaciuto. Sono stati in grado di utilizzare qualsiasi editor HTML per accedere, trovare il file giusto e apportare le modifiche. E sono stati in grado di creare nuove pagine. Tutto da dire: a volte è utile che l'URL e le strutture dei file corrispondano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top