2011-10-12 13 views
6

Attualmente sto imparando come utilizzare il framework symfony2.Modelli senza accesso al database in symfony2

Passando attraverso il cook book, sto iniziando ad avere una comprensione di base di come tutto si combina.

Tuttavia, ho 2 domande riguardanti le imprese, che ritengo modelli nel pattern MVC:

  • Nella documentazione, sembra che ci sia un gran parlare di entità che utilizzano la dottrina come ORM. Se ho un'entità/modello che non richiede alcun ORM, è ancora considerata una "entità"?

  • Nella maggior parte delle esercitazioni che ho visto, le entità sono spesso tutte gettate in una cartella chiamata "entità" sotto il pacchetto di applicazioni. Con molte entità in un'applicazione, sento che questo può diventare piuttosto disordinato e disorganizzato. Come posso raggruppare e organizzare entità?

Saluti :)

risposta

3

quanto riguarda la tua domanda come organizzare le classi del modello:

Puoi aggiungere sottocartelle nella cartella "Entity", poi basta seguire che scructure nella definizione dello spazio dei nomi come:

<?php 

namespace Acme\SampleBundle\Entity\Subfolder\EntityClass 

quanto riguarda la tua domanda lavorare senza orm: è semplice, basta non usarlo. le tue classi si comporteranno come classi "normali".

Ma avrai bisogno di un qualche tipo di interfaccia, come EntityManager in Doctrine2.

Preferirei sempre l'uso di ORM/ODM ..

Quel caso vorrei solo aggiungere un metodo semplice per la classe entità:

<?php 

public function sendByEmail() { 

// Do stuff 
} 

Non dovete persistere (salva nel db) roba a tutti. Si noti che in symfony1.4 c'era un metodo save() su entità. In Symfony2 le cose vengono salvate tramite $entityManager->persist($entity);

+1

Ciò che intendevo non utilizzando ORM è che alcune entità non toccheranno affatto il database, invece potrebbero leggere e scrivere su file o altri archivi. – F21

+0

AFAIK Doctrine ODM può mappare molto bene i file xml. Forse questo è il tuo usecase ... – mblaettermann

+0

Grazie, non sapevo che la dottrina potesse farlo. Per quanto riguarda i casi in cui desidero che la mia entità elabori e convalidi alcuni dati, ma invece di salvarli, dovrebbe inviare i dati via email. In questo caso dovrei comunque usare EntityManager? – F21

0

quando si dice che si dispone di un soggetto/modello che non richiede alcuna ORM, vuoi dire:

  • Il modello è molto semplice in modo da poter costruire le proprie query di database, oppure:
  • I dati possono essere memorizzati in file regolari

?

Se questo è il primo caso, è possibile gestirlo come si desidera, ma è buona norma utilizzare un ORM.

Se questo è il secondo caso (come presumo), è ancora consigliabile creare classi di entità. Semplicemente colleghi i tuoi dati in modo diverso all'interno delle tue lezioni. Invece di interrogare un database, cerchi nei file.

In questo modo si conservano le migliori pratiche e, se un giorno si desidera passare a un modello DB, è necessario modificare solo queste classi.

Per rispondere alla seconda domanda, ho un modello di oltre 50 entità e questo non crea problemi. All'interno delle classi Entities dico all'utente dove trovare il modello di relazione entità, quindi è chiaro.

Questo ti aiuta?

4

Le entità sono modelli memorizzati in un database relazionale. I documenti sono modelli memorizzati in un database di documenti (MongoDB, ad esempio).

Se non si desidera piegare il modello su un determinato spazio dei nomi a seconda del tipo di archiviazione utilizzato, ecco cosa suggerisco. Creare lo spazio dei nomi Model per le classi del modello. Se si sceglie di utilizzare un database relazionale, estendere la classe del modello e inserirla nello spazio dei nomi Entity, fornendo informazioni di mapping in un file esterno. Se in seguito si decide di passare a un database di documenti, si fa lo stesso, ma si utilizza lo spazio dei nomi Document.

Per un buon esempio di questa idea, vedere FOSUserBundle.