2009-07-19 16 views
14

Sto usando il seguente codice per inizializzare un modello da dentro il mio controllo:PHP & Codeigniter - come passare i parametri a un modello?

$this->load->model('model_name'); 

E 'possibile modificare la riga sopra in qualche modo che il costruttore del modello riceve un parametro? Voglio utilizzare il seguente codice nel costruttore del modello:

function __construct($param_var) { 
    parent::Model(); 

    $this->$param_var = $param_var; //I'm not even sure this works in PHP..but different issue 
} 

Questo sarebbe molto utile in modo da poter riutilizzare le classi del modello. Grazie.

UPDATE: (! Da una delle risposte, la mia domanda originale è solved..thanks) Giusto per spiegare il motivo per cui ho voluto fare questo: l'idea è quella di essere in grado di riutilizzare una classe del modello. Quindi, fondamentalmente per dare un semplice esempio, vorrei poter passare una variabile "order_by" alla classe del modello in modo da poter riutilizzare la logica nella classe del modello (e modificare dinamicamente il valore order-by in sql) senza dover per creare una classe separata o una funzione separata.

È questo design scadente? In tal caso, potresti spiegare perché non dovresti fare una cosa del genere e come invece dovresti farlo?

+0

Sono curioso di perché si vuole passare un parametro al costruttore del modello. La mia ipotesi è che hai bisogno di una libreria invece di un modello. – Randell

+1

Ho appena aggiornato la mia domanda con una spiegazione del motivo per cui vorrei fare questo – oym

risposta

3

Vedo il tuo ragionamento per questo, ma posso suggerire di guardare Object-Relational Mapping per le esigenze del tuo database. C'è una libreria ORM creata dall'utente per CodeIgniter chiamata DataMapper che sto usando ultimamente. È possibile utilizzare le tabelle dei controller come oggetti e potrebbe essere più adatto al problema.

+0

grazie per il riferimento, ma penso che questo potrebbe essere eccessivo ... So che non ho dato molto di una descrizione di la mia applicazione, ma quando consiglieresti di usare questa libreria ORM? L'applicazione non dovrebbe essere ad alta intensità di dati (in termini di accesso db) per garantire questo? – oym

+0

In un certo senso sì, mi piace usarlo perché porta a meno codice se la tua app richiede un po 'di dati, ma a meno che il tuo db sia veramente piccolo potrebbe essere un po' eccessivo. – Domenic

20

Non è possibile passare i parametri tramite la funzione load. Dovrete fare qualcosa di simile:

$this->load->model('model_name'); 
$this->model_name->my_constructor('stuff'); 

Nel modello:

function my_constructor($param_var) { 
... 
} 

Risposta per aggiornare:

Si può solo passare il valore order_by quando si sta chiamando la funzione del modello . Sto assumendo nel tuo controller azione, hai qualcosa come $this->model_name->get($my_id); Basta aggiungere il tuo parametro order_by a questa funzione. IMO rende la logica del tuo modello più flessibile/riutilizzabile in base al modo in cui lo stavi facendo, presumo che l'impostazione order_by nel costruttore imposterà il valore order_by per ogni funzione.

+1

Grazie e non dimenticare che puoi impostare valori predefiniti $ param_var = true anche nella funzione modello. – svandragt

+0

Ora puoi, controlla questa [risposta] (http://stackoverflow.com/a/10655252/1027550) – MRodrigues

Problemi correlati