2013-08-15 21 views
5

Sto creando un modulo BE speciale con Extbase e Fluid e ho bisogno di un oggetto dominio che rappresenterebbe l'utente standard di FE. Quando creo un nuovo oggetto dominio chiamato ad es. Feuser e salvarlo, il generatore di estensioni crea un repository speciale e desidera anche creare una tabella speciale tx_myextkey_feuser nel database. Ma questa tabella esiste già come fe_users.TYPO3/Come creare un repository dalla tabella esistente fe_users?

È possibile dire TYPO3 che il repository per Feuser oggetti esiste già (come fe_users da tavola) e che TYPO3 dovrebbe usare quello esistente? Come lo posso fare?

Ne ho bisogno perché l'estensione (incluso questo modulo BE) deve avere tutte le logiche e i controlli sullo stesso posto (questo modulo BE).

In generale, ho bisogno dello stesso dialogo di inserimento per i nuovi utenti FE su due posti, se possibile. In caso contrario, posso creare le mie azioni New/Edit/Show, ma ho bisogno di dire a TYPO3 che dovrebbe usare il repository esistente con gli utenti di FE.

Sto usando l'errore 4.7.3.

risposta

6

ExtBase è già fornito con un modello di dominio per la tabella esistente fe_user. Questo modello di dominio è:

Tx_Extbase_Domain_Model_FrontendUser 

Contiene tutti i campi fe_users predefiniti forniti con TYPO3.

Se è stato esteso fe_users con i propri campi, è inoltre necessario estendere il modello di dominio Tx_Extbase_Domain_Model_FrontendUser e il repository associato in modo che conosca i nuovi campi aggiunti a fe_users.

Il repository associato è:

Tx_Extbase_Domain_Repository_FrontendUserRepository 

È necessario impostare il PID di stoccaggio (s) per il repository, in modo che possa trovare fe_users.

Per azioni di controllo utilizzati in plugin frontend utilizzare:

plugin.your_plugin { 
    persistence { 
     storagePid = somePid, anotherPid 
    } 
} 

Se azioni di controllo utilizzati nei moduli di backend usa:

module.your_module { 
    persistence { 
     storagePid = somePid, anotherPid 
    } 
} 

Per quanto so che non è possibile utilizzare gli stessi dialoghi che vengono con TYPO3 per la propria estensione, quindi devi creare le tue azioni (nuovo/modifica/mostra) e moduli nel tuo modulo di back-end.

[Edit]

Per impostazione predefinita, Extbase presuppone, che tutti i fe_users hanno assegnato un tipo di record. Quando apri uno dei tuoi utenti frontend, vedrai che la scheda "estesa" contiene un campo a discesa, che è etichettato come "tipo di record". Se questo campo non è impostato, ExtBase non sarà in grado di trovare fe_user utilizzando uno dei metodi di ricerca dal repository.

È necessario impostare il tipo di record per tutti i fe_users (modalità consigliata) oppure è possibile disattivare la mappatura al campo utilizzando i seguenti TS nella configurazione

config.tx_extbase.persistence.classes { 
    Tx_Extbase_Domain_Model_FrontendUser { 
     mapping.recordType > 
    } 
} 

Per fe_users o fe_groups appena creati, è possibile impostare il valore predefinito per il campo "tipo di record", aggiungendo la seguente TS ai tuoi Pagets radice

TCAdefaults.fe_users.tx_extbase_type = Tx_Extbase_Domain_Model_FrontendUser 
TCAdefaults.fe_groups.tx_extbase_type = Tx_Extbase_Domain_Model_FrontendUserGroup 
+0

Grazie per la risposta. L'ho fatto come hai detto ma non funziona ancora. Ho aggiunto storagePid in typoscript ma quando ho chiamato method findAll del repository, restituisce zero record. Nel database posso vedere molti record con l'ID che viene salvato in _module.tx_prom.persistence.storagePid_. Cosa può essere sbagliato? Sto usando due repository in un controller, entrambi ho iniettato ma funziona solo il mio primo repository. Il repository di Feusers non lo fa. – Tomask

+0

Se al record fe_users non è assegnato un "tipo di record", è necessario impostare questo campo. Vedere la mia risposta aggiornata su come impostare il campo per impostazione predefinita o su come disabilitare il controllo del campo. – derhansen

+0

Grazie per la risposta. Sfortunatamente la documentazione di extbase è piuttosto scarsa, quindi le risposte a questo tipo di domande devono essere risolte da qualche altra parte. Grazie ancora. – Tomask

6

per Extbase 6.X

è necessario dare classe come \TYPO3\CMS\Extbase\Domain\Model\FrontendUser invece di Tx_Extbase_Domain_Repository_FrontendUserRepository nel Estendere campo di classe modello esistente all'interno costruttore estensione

Dopo di che si può avere il controllo del fe_users all'interno del vostro modello di ....

anche aggiungere file di ext_typoscript_setup.txt nella radice della tua estensione (aggiunto automaticamente se generato tramite extension_builder)

config.tx_extbase{ 
    persistence{ 
     classes{ 

      TYPO3\CMS\Extbase\Domain\Model\FrontendUser { 
       subclasses { 
        Tx_Extendfeuser_Extended = Model_class_with_namespace 

       } 
      } 
      SkiBoutique\SbChalets\Domain\Model\Extended { 
       mapping { 
        tableName = fe_users 
        recordType = Tx_Extendfeuser_Extended 
       } 
      } 

     } 
    } 
} 

Grazie !!!

Funziona con TYPO3 7.6.X così

+1

Sì! Funziona con l'ultima versione di TYPO3. Grazie! –

Problemi correlati