2008-09-25 19 views
6

Czy istnieje prosty sposób napisania wspólnej funkcji dla każdej operacji CRUD (create, retreive, update, delete) w PHP BEZ użycia jakiejkolwiek struktury. Na przykład chcę mieć jedną funkcję tworzenia, która pobiera nazwy i nazwy pól jako parametry i wstawia dane do mySQL database. Innym wymogiem jest to, że funkcja powinna móc obsługiwać połączenia, tj. w razie potrzeby powinna mieć możliwość wstawiania danych do wielu tabel.Najczęstsze funkcje CRUD w PHP

wiem, że zadania te mogą być wykonywane za pomocą ramy, ale z różnych powodów - zbyt długie, aby wyjaśnić tutaj - nie mogę ich używać.

Odpowiedz

1

to pisałem bardzo, to rodzaj wypolerowanego rusztowania. Jest to w zasadzie klasa, której konstruktor pobiera tabelę do użycia, tablica zawierająca nazwy i typy pól oraz akcję. Na podstawie tej akcji obiekt wywołuje samą metodę. Na przykład:

Jest to tablica mijam:

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

Potem wywołać konstruktor:

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

w powyższym przypadku konstruktor nazywa „edytuj” metodę, która stanowi formę wyświetlanie danych z tabeli $, ale tylko pola ustawione w mojej tablicy. Rekord, którego używa, jest określony przez metodę $ _GET. W tym przykładzie pole "student" jest przedstawione jako pole tekstowe (stąd typ "tekstowy"). "Tytuł" to po prostu używana etykieta. Będąc "ukrytym" pole identyfikacyjne nie jest pokazywane do edycji, ale jest dostępne dla programu do użycia.

Gdybym przekazał "delete" zamiast "edit", to usunąłby rekord ze zmiennej GET. Jeśli przekazałbym tylko nazwę tabeli, domyślnie byłaby to lista rekordów z przyciskami do edycji, usuwania i nowego.

To tylko jedna klasa, która zawiera wszystkie CRUD z dużą możliwością dostosowania. Możesz to uczynić tak skomplikowanym lub tak prostym, jak chcesz. Tworząc ją jako klasę ogólną, mogę umieścić ją w dowolnym projekcie i po prostu przekazać instrukcje, informacje o tabelach i informacje o konfiguracji. Mogę dla jednej tabeli nie chcieć zezwolić na dodawanie nowych rekordów przez rusztowanie, w tym przypadku mogę ustawić "newbutton" na false w mojej tablicy parametrów.

To nie jest struktura w rozumieniu konwencjonalnym. Tylko samodzielna klasa, która obsługuje wszystko wewnętrznie. Jest w tym kilka wad. Najważniejsze jest to, że wszystkie moje tabele muszą mieć klucz podstawowy o nazwie "id", można uciec bez tego, ale to by skomplikowało sprawy. Inną istotną kwestią jest to, że duża tablica informująca o każdej zarządzanej tabeli musi być przygotowana, ale musisz zrobić to tylko raz.

Dla tutorial na ten pomysł zobaczyć here

+0

Firefox nie lubi Twojej witryny. –

+0

ta strona wydaje się być wyłączona przez jakiś czas? Próbowałem już kilka razy ... –

+0

Nie moja strona, tylko link do niej. – lewis

2

Bez jakichkolwiek ram obejmuje bez żadnych ORM? W przeciwnym razie proponuję rzucić okiem na Doctrine lub.

3

Oczywiście, że nie, to dlaczego istnieją te ramy i wdrożenie urządzeń CRUD. Najpierw spróbuję przekonać wszystkich, którzy potrzebują do korzystania z istniejącej struktury, a po drugie, jeśli nie powyższe, przyjrzę się jednemu lub dwóm z nich i skopiuję pomysły na wdrożenie. W przeciwnym wypadku wszystko, że można spojrzeć na http://www.phpobjectgenerator.com/

0

to jest możliwe, ale nie polecam go.

Jeśli istnieje absolutnie żaden sposób wykorzystywać ramy można utworzyć klasę bazową, że wszystkie inne obiekty modelowe przedłużenia. Następnie można sprawić, że klasa podstawowa wygeneruje kod SQL & na podstawie get_class() i get_class_vars().

Czy to możliwe? Tak.
Czy poleciłbym go? nope

7

Jeśli spróbujesz napisać taką funkcję wkrótce odkrywają, że właśnie realizowany kolejny ramy.

2

Wiem, jak się czujesz.

Pork.DbObject to prosta klasa, która można rozszerzyć swoje obiekty z. Do działania wystarczy klasa db.

proszę sprawdzić: www.schizofreend.nl/pork.dbobject/

(oh yeah, Fuj @ php obiekt alert uwędzić generator kto chce mieć te funkcje niestandardowe w każdej klasie ???.!)

+0

+1 za schludność obiektu Pork.DbObject! –

1

myślę, że należy napisać własne funkcje, które osiągają CRUD chyba że jesteś zestresowany na czasie. może to być framework na swój własny sposób, ale musisz nauczyć się, co robi framework, zanim zaczniesz krzyczeć framework .... również staje się przydatny do poznania tych rzeczy, ponieważ możesz łatwo zebrać błędy w strukturze i naprawić je samemu .... ....

1

Natknąłem się na to pytanie przez chwilę, a ja nie znalazłem w tym czasie nic, co zrobiłoby to w lekki sposób.

Skończyło się na pisaniu własnych i ostatnio udało mi się otworzyć to zaopatrzenie (licencja MIT) na wypadek, gdyby inni uznali to za przydatne. Jest na Githubie, nie krępuj się, sprawdź to i wykorzystaj, jeśli odpowiada Twoim potrzebom!

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

Mam nadzieję, że znajdzie jakiś wykorzystania - chciałbym zobaczyć kilka ulepszeń/składek też dlatego zachęcamy do składania zapytań ciągnąć! :-)