Domanda

Esiste un modo semplice per scrivere una funzione comune per ciascuna delle operazioni CRUD (creare, recuperare, aggiornare, eliminare) in PHP SENZA utilizzare alcun framework. Ad esempio, desidero avere un'unica funzione di creazione che prende il nome della tabella e i nomi dei campi come parametri e inserisce i dati in un database mySQL . Un altro requisito è che la funzione dovrebbe essere in grado di supportare i join, ad es. dovrebbe essere in grado di inserire dati in più tabelle, se necessario.

So che questi compiti potrebbero essere svolti utilizzando un framework, ma per vari motivi - troppo lunghi per essere spiegati qui - non li posso usare.

È stato utile?

Soluzione

Ho scritto proprio questa cosa, è una specie di impalcatura levigata. È fondamentalmente una classe il cui costruttore prende la tabella da utilizzare, un array che contiene nomi e tipi di campi e un'azione. Sulla base di questa azione, l'oggetto chiama un metodo su se stesso. Ad esempio:

Questo è l'array che passo:

$data = array(array('name' => 'id', 'type' => 'hidden')
          , array('name' => 'student', 'type' => 'text', 'title' => 'Student'));

Quindi chiamo il costruttore:

new MyScaffold($table, 'edit', $data, 

Ho scritto proprio questa cosa, è una specie di impalcatura levigata. È fondamentalmente una classe il cui costruttore prende la tabella da utilizzare, un array che contiene nomi e tipi di campi e un'azione. Sulla base di questa azione, l'oggetto chiama un metodo su se stesso. Ad esempio:

Questo è l'array che passo:

$data = array(array('name' => 'id', 'type' => 'hidden')
          , array('name' => 'student', 'type' => 'text', 'title' => 'Student'));

Quindi chiamo il costruttore:

<*>

Nel caso precedente il costruttore chiama il metodo 'edit' che presenta un modulo che mostra i dati dalla tabella $, ma solo i campi che ho impostato nel mio array. Il record che utilizza è determinato dal metodo $ _GET. In questo esempio il campo "studente" è presentato come una casella di testo (da cui il tipo "testo"). Il "titolo" è semplicemente l'etichetta utilizzata. Essendo "nascosto" il campo ID non viene mostrato per la modifica ma è disponibile per l'uso al programma.

Se avessi passato 'cancella' invece di 'modifica' avrebbe cancellato il record dalla variabile GET. Se avessi passato solo il nome di una tabella, sarebbe stato predefinito un elenco di record con pulsanti per la modifica, l'eliminazione e il nuovo.

È solo una classe che contiene tutto il CRUD con molta personalizzazione. Puoi renderlo complicato o semplice come desideri. Rendendolo una classe generica, posso inserirlo in qualsiasi progetto e passare semplicemente istruzioni, informazioni sulla tabella e informazioni sulla configurazione. Potrei per una tabella non voler consentire l'aggiunta di nuovi record attraverso lo scaffold, in questo caso potrei impostare "newbutton" essere falso nel mio array di parametri.

Non è un framework in senso convenzionale. Solo una classe autonoma che gestisce tutto internamente. Ci sono alcuni svantaggi di questo. Quelli chiave devono essere che tutti i miei tavoli devono avere una chiave primaria chiamata 'id', potresti cavartela senza questo ma complicherebbe le cose. Un altro è che deve essere preparato un ampio array che dettaglia le informazioni su ciascuna tabella da gestire, ma è necessario farlo solo una volta.

Per un tutorial su questa idea vedi qui

GET['id']);

Nel caso precedente il costruttore chiama il metodo 'edit' che presenta un modulo che mostra i dati dalla tabella $, ma solo i campi che ho impostato nel mio array. Il record che utilizza è determinato dal metodo $ _GET. In questo esempio il campo "studente" è presentato come una casella di testo (da cui il tipo "testo"). Il "titolo" è semplicemente l'etichetta utilizzata. Essendo "nascosto" il campo ID non viene mostrato per la modifica ma è disponibile per l'uso al programma.

Se avessi passato 'cancella' invece di 'modifica' avrebbe cancellato il record dalla variabile GET. Se avessi passato solo il nome di una tabella, sarebbe stato predefinito un elenco di record con pulsanti per la modifica, l'eliminazione e il nuovo.

È solo una classe che contiene tutto il CRUD con molta personalizzazione. Puoi renderlo complicato o semplice come desideri. Rendendolo una classe generica, posso inserirlo in qualsiasi progetto e passare semplicemente istruzioni, informazioni sulla tabella e informazioni sulla configurazione. Potrei per una tabella non voler consentire l'aggiunta di nuovi record attraverso lo scaffold, in questo caso potrei impostare "newbutton" essere falso nel mio array di parametri.

Non è un framework in senso convenzionale. Solo una classe autonoma che gestisce tutto internamente. Ci sono alcuni svantaggi di questo. Quelli chiave devono essere che tutti i miei tavoli devono avere una chiave primaria chiamata 'id', potresti cavartela senza questo ma complicherebbe le cose. Un altro è che deve essere preparato un ampio array che dettaglia le informazioni su ciascuna tabella da gestire, ma è necessario farlo solo una volta.

Per un tutorial su questa idea vedi qui

Altri suggerimenti

Se provi a scrivere tale funzione scoprirai presto che hai appena realizzato un altro framework.

Certo che no, ecco perché esistono questi framework e implementano strutture di base. Per prima cosa proverei a convincere chiunque impieghi effettivamente un framework esistente e in secondo luogo, in mancanza di quanto sopra, darei un'occhiata a uno o due di essi e copierei le idee di implementazione. Non riuscendo a dare un'occhiata a http://www.phpobjectgenerator.com/

Senza framework inclusi senza ORM? Altrimenti, suggerirei di dare un'occhiata a Doctrine o Propel .

So come ti senti.

Pork.DbObject è una classe semplice da cui puoi estendere i tuoi oggetti. Ha solo bisogno di una classe di connessione db per funzionare.

controlla: www.schizofreend.nl/pork.dbobject/

(oh sì, yuk @ php generatore di oggetti. avviso bloat! chi vuole avere quelle funzioni personalizzate in ogni classe ???)

Penso che dovresti scrivere le tue funzioni che raggiungono il CRUD a meno che tu non sia stressato per il tempo. potrebbe essere un framework a sé stante ma è necessario imparare cosa fa il framework prima di urlare il framework .... diventa anche utile conoscere queste cose perché puoi facilmente raccogliere i bug sul framework e risolverli da solo .... ....

Mi sono imbattuto in questa domanda su SO qualche tempo fa e alla fine non ho trovato nulla che lo facesse in modo leggero.

Ho finito per scrivere il mio e di recente sono andato in giro ad aprirlo (licenza MIT) nel caso in cui altri lo trovassero utile. È su Github, sentiti libero di provarlo e usarlo se si adatta alle tue esigenze!

https://github.com/ArthurD/php-crud-model-class

Speriamo che possa essere utile - mi piacerebbe vedere alcuni miglioramenti / contributi, quindi sentiti libero di inviare richieste pull! : -)

è possibile ma non lo consiglierei.

Se non c'è assolutamente NESSUN modo di utilizzare un framework, è possibile creare una classe base estesa da tutti gli altri oggetti modello. Puoi quindi fare in modo che la classe base generi & amp; eseguire SQL in base a get_class () e get_class_vars () .

È possibile? Sì.
Lo consiglierei? no

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