Si può accedere a un modello all’interno di un altro modello in CodeIgniter?

Sto scrivendo una webapp con CodeIgniter che richiede l’autenticazione. Ho creato un modello che gestisce tutti i miei autenticazione. Tuttavia, non riesco a trovare un modo per accedere a questo modello di autenticazione da all’interno di un altro modello. C’è un modo per accedere a un modello da dentro un altro modo, o un modo migliore per gestire l’autenticazione all’interno CodeIgniter?

InformationsquelleAutor Eldila | 2008-09-05

 

4 Replies
  1. 14

    In generale, non si vuole creare oggetti all’interno di un oggetto. Che una cattiva abitudine, invece, scrivere un chiaro API e iniettare un modello in modello.

    <?php
    //in your controller
    $model1 = new Model1();
    $model2 = new Model2();
    $model2->setWhatever($model1);
    ?>
    • Questa è una buona pratica? Perché l’utente di Model2 deve sapere, che dipendono Model1. Che cosa è una buona pratica?
    • Sì, meglio la pratica di “iniettare” la dipendenza, contro l’inizializzazione del Model2 all’interno Model1.
    • Che non suona bene da un LAVAGGIO di vista. Che cosa succede se ho una funzione che cambia aspetto di un modello e attiva un’azione per un altro modello?
    • Sono totalmente d’accordo – model2 non deve passare in model1 per iniziare con. Ma se è necessario, questo è il meglio che si può fare.
    • Questa non è una buona pratica. Se è necessario utilizzare un modello all’interno di un modello, quindi prendere in considerazione ottenere un’istanza di CI
    • Che cosa non è una buona pratica? L’iniezione delle dipendenze è buona pratica!
    • Ti manca la foresta per gli alberi. E ‘ perfettamente bene di creare un modello all’interno di un altro modello, se i due stanno per essere strettamente legati. Non è necessario iniettare ogni dipendenza e completamente a scindere ogni classe da ogni altro. In realtà, è dannato quasi impossibile farlo. Quello che dovete fare è trovare le linee di faglia nel vostro sistema, i luoghi dove accoppiamento può essere ragionevolmente raggiunto. Isolare i moduli e sistemi dagli altri e di usare la dependency injection c’. Non tutto deve essere testato in isolamento.
    • Non ho mai detto che non c’erano casi limite. Ci possono essere situazioni in cui ciò che si dice deve essere fatto, ma onestamente non posso pensare di uno. 🙂 DI è sicuramente una buona pratica. Sei anche commentando la risposta che ho dato 3 anni fa.
    • Può essere di tre anni, ma la gente ancora trovare (io l’ho fatto). Quindi è ancora aperto per la discussione 😉 io sono per lo più la possibilità di contestare la tua prima affermazione: “In generale, non si vuole creare oggetti all’interno di un oggetto.” Questo è falso. Periodo. Più OO Modelli di Progettazione che richiedono la creazione di oggetti all’interno di oggetti. E non si può iniettare tutti loro. Provare a utilizzare il modello factory iniezione di tutto il creato. Batte il punto del modello. Ora, è più debateable se è una buona pratica per creare un IC Modello all’interno di un IC Modello…
    • Per la testabilità del codice, oggetto di introdurre le dipendenze in un oggetto che non può essere facilmente sostituita. Che è tutto sto dicendo, e che è perché ho ancora in piedi dal mio punto di vista originale che si dovrebbe puntare per DI.
    • Dipendenza tra moduli o componenti, non necessariamente tra gli oggetti. Posto che tutti gli oggetti utilizzati da qualsiasi altro oggetto deve essere iniettato è solo stupido. La maggior parte del tempo non è necessario il test di oggetti in isolamento.
    • Ho pensato che l’idea di programmazione orientata agli oggetti è la possibilità di creare gerarchie di oggetti in modo che si desidera loro di essere.
    • Perché non è una buona pratica per caricare oggetti all’interno di oggetti? Che può essere molto buona pratica. Tutto dipende dal vostro disegno e obiettivi. In effetti la maggior parte delle variabili membro saranno oggetti. Più variabili locali saranno oggetti.
    • Io non voglio discutere questo ulteriore perché ogni paio di mesi qualcuno si sente di esprimere la propria opinione. C’è una cosa che si chiama dependency injection (DI) che permette a me e a scambiare le dipendenze di un oggetto — se non altro questo è un vantaggio per “mantenibile” (codice di qualità) e LBNL per il test. Argueing che non hai bisogno di oggetti di prova in isolamento è bene, ma allora non sei unit test più. E mentre lo scopo e ‘ di test di logica di business, è poi finire il test di un intero quadro e del database sottostante. Questo non lo rende più facile trovare un bug nel codice.

  2. 18

    Sembra che si possa caricare i modelli all’interno di modelli, anche se probabilmente dovrebbe risolvere questo un altro modo. Vedere CodeIgniter forum per una discussione.

    class SomeModel extends Model
    {
      function doSomething($foo)
      {
        $CI =& get_instance();
        $CI->load->model('SomeOtherModel','NiceName',true);
    
        //use $CI instead of $this to query the other models
        $CI->NiceName->doSomethingElse();
      }
    }

    Inoltre, non capisco cosa Fino a che sta dicendo su di che non si deve creare oggetti all’interno di oggetti. Ovviamente si deve! L’invio di oggetti come argomenti sembra molto meno chiaro per me.

    • La denuncia è che facendo così, inutilmente crea una forte dipendenza tra i due modelli. Quando si sta testando, per esempio, è bello essere in grado di dare SomeModel una versione finto di SomeOtherModel; non si può fare che se il primo è direttamente carico di quest’ultimo. O si modifica il codice per utilizzare un modello diverso, con la stessa interfaccia, come quando si sta refactoring del codice esistente per l’utilizzo di un sistema di plugin.
    • Google ha un open source quadro di iniezione di dipendenza. È per Java, ma non spiega i pro e alcuni contro la dependency injection. code.google.com/p/google-guice
    • Howard C’è una cosa come prendere l’iniezione di dipendenza troppo. Non è necessario iniettare ogni singolo oggetto che si utilizza, come non ogni singolo oggetto che si utilizza deve essere testato in isolamento. Piuttosto si desidera sistemi di test e moduli che funzionano insieme come un tutto, e quelli devono essere isolate le une dalle altre e iniettato.
    • Ha funzionato per me con $questo. Io sono su 2.1.3
    • Non posso credere che questa risposta è 15 voti, Il ragionamento dietro di esso mi fa rabbrividire, Questo è l’anti pattern di anti modelli(e no, non è buona da doppie negazioni)
  3. 1

    Non gestire l’autenticazione del modello. Utilizzare solo i modelli per l’interfaccia con il database, o ldap o qualsiasi altra cosa.

    Ho creato un Auth libreria che uso per gestire l’autenticazione e l’autorizzazione. È possibile accedere a una libreria come questo, dal tuo controller.

    • Ho sempre messo il mio oauth implementazioni all’interno di un modello, non mi piace sporcando il mio controller con codice di autenticazione
    • ho deciso di creare un mio controllore e fare tutto oauth c’.
  4. 1

    Il caricamento di un modello all’interno di un modello da oggi è possibile con il nuovo CodeIgniter.

Lascia un commento