Esiste un modo di usare PHP-ActiveRecord come / livello di astrazione ORM di symfony?
-
04-10-2019 - |
Domanda
Ho appena scoperto PHP-ActiveRecord non troppo tempo fa dopo aver lottato per quasi un mese per scrivere il mio ORM (sto testa dura del genere) e mi sono innamorato con esso. Avevo guardato Dottrina e Propel prima, ma ha deciso di scappare a causa della enorme complessità e la curva di apprendimento. Con AR, non ho l'ansia e difficoltà di apprendimento che ho avuto con gli altri.
Poco dopo, ho anche scoperto il framework symfony (ero anche cercando di fare il mio quadro da stratch dopo aver trovato altri framework eccessivamente gonfio). Tuttavia, ho un problema: il framework symfony utilizzando Dottrina e Propel come strato ORM / astrazione, fuori dalla scatola, senza alcuna documentazione su come modificarlo
.Non ho in realtà ancora utilizzato symfony, ho letto il libro "Gentle Introduction". Lo strato ORM / astrazione sembra un po 'rimosso dal nucleo di symfony e sembra essere abbastanza facile da convertire tutto sopra. La domanda è ... è vero?
Qualcuno ha alcun tipo di esperienza con ActiveRecord con symfony o, anche, utilizzando qualcosa di diverso Dottrina / Propel con symfony?
Soluzione
Vorrei riunire il codice ActiveRecord come plugin di Symfony. Si può leggere di più sulla creazione di Symfony plugin qui . Le basi sarebbero:
- Crea una cartella
plugins/sfActiveRecordPlugin
. Inserire il codice record attivo inplugins/sfActiveRecordPlugin/lib/vendor
. - mettere quello bootstrapping ActiveRecord bisogno
sfActiveRecordPlugin/config/config.php
all'interno. Questo codice otterrà eseguito ogni volta che viene creata un'istanza ProjectConfiguration. Se ActiveRecord ha il proprio caricatore automatico, probabilmente avrete bisogno di risolutezza che qui. Potrebbe anche essere necessario impostare Symfony di ignorare le classi ActiveRecord, questo viene fatto tramiteautoload.yml
. -
Attiva il plugin nella classe
ProjectConfiguration
:class ProjectConfiguration extends sfProjectConfiguration { public function setup() { $this->enablePlugins(array( 'sfActiveRecordPlugin', )); } }
L'abilitazione plugin chiamano consente di disattivare tutti i plugin non espressamente abilitati. È anche possibile chiamare disablePlugins con i plugin che non si desidera caricare, se si preferisce.
Questo dovrebbe essere la maggior parte del lavoro.
Infine, vorrei vi esorto a dare Dottrina un altro colpo. La dottrina è un ORM molto potente e IMO è il migliore in circolazione. Inoltre, Symfony viene fornito con un sacco di cose specifiche dottrina che si sta andando a finire per riscrivere almeno alcuni dei.