PHP Ortak CRUD fonksiyonları

8 Cevap php

Herhangi bir çerçeve kullanarak OLMADAN php işlemleri (oluşturmak, retreive, güncelleme, silme) CRUD her biri için ortak bir işlevi yazmak için basit bir yolu var mı. Örneğin ben bir mySQL veritabanına parametreler ve ekler veri olarak tablo adını ve alan adlarını alır bir tek oluşturmak işlevi olmasını diliyorum. Başka bir gereklilik işlevi desteklemek gerekir ki gerekli ise birden fazla tabloya veri eklemek mümkün olmalı, yani katılır.

Burada açıklamak için çok uzun - - Ben bu görevleri çeşitli nedenlerle bir çerçeve kullanılarak ama yapılabilir olduğunu biliyorum ben bunları kullanamazsınız.

şimdiden çok teşekkürler.

Vinayak

8 Cevap

Ben bir cilalı iskele naziksiniz, bu çok şey yazdı. Temelde kullanılacak tabloyu alır yapıcı olan bir sınıf, alan adlarını ve türlerini içeren bir dizi ve bir eylem var. Bu eylem dayalı nesne kendisi bir yöntem çağırır. Örneğin:

Bu ben geçmek dizidir:

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

Sonra kurucusunu çağırmak:

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

Yukarıdaki durumda yapıcı $ tablodan veri görüntüleyen bir form sunar 'düzenle' yöntemi çağırır, ama sadece alanlar benim dizide kurmak. Kullandığı kayıt $ _GET yöntemi ile belirlenir. Bu örnekte 'öğrenci' alan bir metin kutusu (dolayısıyla 'text' tipi) olarak sunulmuştur. 'Title', sadece kullanılan etikettir. 'Gizli' olan ID alanı düzenleme için gösterilen değil ancak kullanımı için program mevcuttur.

Ben bunun yerine 'düzenleme' ve 'delete' geçmişti eğer GET değişkeni kaydını silmek istiyorsunuz. Ben sadece bir tablo adı geçti ise, düzenlemek için düğmeleri ile kayıt listesine varsayılan silin ve yeni olacaktır.

Bu customisability sürü ile tüm CRUD içeren sadece bir sınıf bulunuyor. Sen o kadar karmaşık ya da istediğiniz kadar basit yapabilirsiniz. Bunu bir genel sınıf yaparak ben herhangi bir proje için açılan ve sadece talimatları, masa bilgi ve yapılandırma bilgilerini iletebilirsiniz. Ben bir tablo için, iskele ile eklenen yeni kayıtlar izin vermek bu durumda benim parametre dizisindeki yanlış olduğu "newbutton" ayarlanmış olabilir istemeyebilirsiniz.

Bu, geleneksel anlamda bir çerçeve değil. Içten şeyi yönetir sadece tek başına bir sınıf. Bu bazı dezavantajları vardır. Anahtar olanları tüm tabloları 'id' denilen bir birincil anahtar, bu olmadan uzakta alabilir olması gerekir ama bu konularda karmaşık olacağını olmalıdır. Başka yönetilmesi gereken her tablo hakkında ayrıntılı bilgiyi büyük bir dizi hazırlıklı olması gerektiğini varlık, ancak yalnızca bir kez yapmanız gerekir.

Bu fikir See ile ilgili bir eğitim için here

Eğer böyle bir işlevi yazmak için çalışırsanız yakında henüz başka bir çerçeveyi fark ettik olduğunu keşfedeceksiniz.

Bu çerçeveler crud tesisleri var ve uygulamak neden tabii ki bu değil. Ben ilk aslında yukarıdaki başarısız, ikinci varolan çerçeve kullanmak ve alır kişiye ikna etmeye çalışacaktı, ben bunlardan biri veya ikisi bir göz atın ve uygulama fikirlerini kopyalamak istiyorum. Eğer http://www.phpobjectgenerator.com/ bakmak verebilecek tüm Başarısız

Herhangi çerçeveler olmadan herhangi ORMs olmadan içerir? Aksi takdirde Doctrine veya Propel bakmak öneririz.

Ben hissediyorum yol biliyorum.

Pork.DbObject sizden nesneleri uzatabilirsiniz basit bir sınıftır. Sadece çalışmak için bir db bağlantısı sınıf gerekiyor.

please check out: www.schizofreend.nl/pork.dbobject/

(Oh evet, yuk @ php nesne jeneratör. bloat alert! kim her sınıfta bu özel işlevleri istiyor?)

Ben zaman için vurguladı sürece CRUD ulaşmak, kendi fonksiyonlarını yazmak gerektiğini düşünüyorum. onu kendi üzerinde bir çerçeve olabilir ama çerçeve çerçeve çığlık önce ne öğrenmemiz gerekiyor .... o da onlara kendini kolayca alıcı çerçeve üzerinde hata ve düzeltmek çünkü bu şeyleri bilmek için kullanışlı olur .... ....

Ben bir süre geri SO bu soru geldi ve ben hafif bir şekilde bunu o zaman bir şey bulmak değil sona erdi.

Ben kendi yazma sona erdi ve ben son zamanlarda diğerleri yararlı bulabilirsiniz durumda onu (MIT lisans) kaynak açmak için çevresinde var. Bu Github üzerinde kalmış, bunu kontrol ve sizin ihtiyaçlarınıza uygun olup olmadığını kullanmak için çekinmeyin!

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

Umarım bazı kullanımı bulacaksınız - bazı iyileştirmeler / katkılarını görmek isterdim, çok çok çekme istekleri göndermek için çekinmeyin! :-)

bu mümkün ama ben bunu tavsiye etmem.

Tüm diğer model nesneleri genişletmek bir temel sınıf yaratabilecek bir çerçeve kullanmak için hiçbir yolu kesinlikle varsa. Daha sonra temel sınıf oluşturmak olun & yapabilirsiniz get_class() ve get_class_vars() dayalı SQL yürütmek.

Is it possible? Yes.
Would I recommend it? nope