2008-09-25 14 views
6

Existe una manera simple de escribir una función común para cada una de las operaciones CRUD (create, retreive, update, delete) en PHP SIN usar ningún marco. Por ejemplo, deseo tener una única función de creación que tome el nombre de la tabla y los nombres de campo como parámetros e inserte datos en un mySQL database. Otro requisito es que la función debería ser capaz de admitir combinaciones, es decir debería ser capaz de insertar datos en múltiples tablas si es necesario.Funciones comunes de CRUD en PHP

Sé que estas tareas se pueden hacer mediante el uso de un marco, pero debido a varias razones, demasiado largas para explicarlas aquí, no puedo usarlas.

Respuesta

1

de escribir este en realidad, es una especie de andamio pulido. Básicamente es una clase cuyo constructor toma la tabla para ser utilizada, una matriz que contiene nombres y tipos de campos y una acción. En función de esta acción, el objeto llama a un método en sí mismo. Por ejemplo:

Esta es la matriz I pass:

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

Entonces llamar al constructor:

new MyScaffold($table, 'edit', $data, $_GET['id']); 

En el caso anterior el constructor llama al método 'editar' que presenta una forma mostrar datos de $ table, pero solo los campos que configuré en mi matriz. El registro que usa está determinado por el método $ _GET. En este ejemplo, el campo 'estudiante' se presenta como un cuadro de texto (de ahí el tipo 'texto'). El 'título' es simplemente la etiqueta utilizada. Al estar 'oculto', el campo ID no se muestra para editar, pero está disponible para el uso del programa.

Si hubiera pasado 'eliminar' en lugar de 'editar' eliminaría el registro de la variable GET. Si aprobé solo el nombre de una tabla, aparecería de manera predeterminada en una lista de registros con botones para editar, eliminar y nuevo.

Es solo una clase que contiene todo el CRUD con mucha personalización. Puedes hacerlo tan complicado o tan simple como desees. Al convertirlo en una clase genérica, puedo incluirlo en cualquier proyecto y simplemente aprobar las instrucciones, la información de la tabla y la información de configuración. Es posible que para una tabla no quiera permitir que se agreguen nuevos registros a través del andamio, en este caso podría establecer "newbutton" como falso en mi matriz de parámetros.

No es un marco en el sentido convencional. Solo una clase independiente que maneja todo internamente. Hay algunos inconvenientes a esto. Las claves deben ser que todas mis tablas deben tener una clave principal llamada 'id', podría escaparse sin esto pero complicaría las cosas. Otra de las razones es que debe prepararse una gran cantidad de información detallada sobre cada tabla para administrar, pero solo debe hacer esto una vez.

Para un tutorial sobre esta idea ver here

+0

Firefox no le gusta su sitio web. –

+0

este sitio web parece haber estado inactivo por un tiempo? Lo he intentado algunas veces ... –

+0

No es mi sitio, solo está vinculado a él. – lewis

2

Sin ningún marco incluye sin ningún ORM? De lo contrario, sugeriría echar un vistazo a Doctrine o Propel.

3

Por supuesto que no, es por eso que esos marcos existen e implementan instalaciones crud. Primero trataría de convencer a quien sea para utilizar realmente un marco existente y, en segundo lugar, si fallase lo anterior, echaría un vistazo a uno o dos de ellos y copiaría las ideas de implementación. Si falla todo lo que podría echar un vistazo a http://www.phpobjectgenerator.com/

0

es posible pero no lo recomendaría.

Si no hay absolutamente ninguna forma de utilizar un marco, podría crear una clase base que extiendan todos los demás objetos del modelo. A continuación, puede hacer que la clase base genere & ejecute SQL basado en get_class() y get_class_vars().

¿Es posible? Sí.
¿Lo recomendaría? no

7

Si intenta escribir tal función, pronto descubrirá que acaba de realizar otro marco.

2

Sé cómo te sientes.

Pork.DbObject es una clase simple de la que puedes extender tus objetos. Solo necesita una clase de conexión db para funcionar.

favor echa un vistazo a: www.schizofreend.nl/pork.dbobject/

(. Oh sí, ¡puaj @ php generador objeto alerta hinchazón que quiere tener esas funciones personalizadas en cada clase ???!)

+0

+1 por la pulcritud de Pork.DbObject! –

1

Creo que deberías escribir sus propias funciones que logran CRUD a menos que usted está estresado por el tiempo. podría ser un marco por sí mismo, pero necesita aprender lo que hace el framework antes de gritar framework ... también es útil saber estas cosas porque puede detectar errores fácilmente en el framework y arreglarlos usted mismo .... ....

1

Me encontré con esta pregunta hace un tiempo y terminé sin encontrar nada en ese momento que hizo esto de una manera ligera.

Terminé escribiendo el mío y recientemente conseguí abrirlo (licencia MIT) en caso de que otros lo encuentren útil. ¡Está en Github, no dudes en echarle un vistazo y utilizarlo si se adapta a tus necesidades!

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

de esperar que se encuentre algún uso - me encantaría ver algunas mejoras/contribuciones, también, así que no dude en enviar peticiones de tracción! :-)