2009-07-19 18 views
14

Ich bin mit dem folgenden Code ein Modell aus meinem Controller zu initialisieren:PHP & Codeigniter - Wie übergibt man Parameter an ein Modell?

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

Ist es möglich, die obige Zeile irgendwie so, dass der Modellbauer recieves einen Parameter zu ändern? Ich mag den folgenden Code in dem Modellbauer verwenden:

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

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

Dies wäre sehr hilfreich, so dass ich meine Modellklassen wiederverwenden kann. Vielen Dank.

UPDATE: (! Von einem der Antworten, meine ursprüngliche Frage ist solved..thanks) einfach zu erklären, warum ich das tun wollte: die Idee, in der Lage sein, ein Modell Klasse wiederzuverwenden. Um ein einfaches Beispiel zu geben, würde ich gerne eine "order_by" -Variable an die Modellklasse übergeben können, so dass ich die Logik in der Modellklasse wiederverwenden kann (und dynamisch den order-by-Wert im sql ändern kann) um eine separate Klasse oder eine separate Funktion zu erstellen.

Ist dieses schlechte Design? Wenn ja, kannst du bitte erklären, warum du so etwas nicht tust und wie du es stattdessen tun würdest?

+0

Ich bin neugierig, warum Sie wollen würden, um einen Parameter zu Ihrem Modell Konstruktor zu übergeben. Meine Vermutung ist, dass Sie eine Bibliothek anstelle eines Modells benötigen. – Randell

+1

Ich habe gerade meine Frage mit einer Erklärung aktualisiert, warum ich das tun würde – oym

Antwort

3

Ich sehe Ihre Argumentation dafür, aber kann ich empfehlen, Object-Relational Mapping für Ihre Datenbank Bedürfnisse zu betrachten. Es gibt eine benutzerdefinierte ORM-Bibliothek für CodeIgniter namens DataMapper, die ich in letzter Zeit benutzt habe. Sie können Tabellen in Ihren Controllern als Objekte verwenden und es ist möglicherweise besser für Ihr Problem geeignet.

+0

danke für die Referenz, aber ich denke, das könnte Overkill..Ich weiß, ich habe nicht viel von einer Beschreibung geben meine Anwendung, aber wann würden Sie die Verwendung dieser ORM-Bibliothek empfehlen? Müsste die Anwendung nicht sehr datenintensiv sein (in Bezug auf den Datenbankzugriff), um dies zu gewährleisten? – oym

+0

In gewisser Weise, ich mag es zu verwenden, weil es zu weniger Code führt, wenn Ihre App etwas datenintensiv ist, aber wenn Ihre db nicht wirklich klein ist, kann es ein bisschen übertrieben sein. – Domenic

20

Sie können Parameter nicht über die Funktion load übergeben. Sie werden wie etwas zu tun haben:

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

Im Modell:

function my_constructor($param_var) { 
... 
} 

Antwort zu aktualisieren:

Sie könnten nur die order_by Wert übergeben, wenn Sie Ihre Modellfunktion sind Aufruf . Ich nehme an, in Ihrer Controller-Aktion haben Sie etwas wie $this->model_name->get($my_id); Fügen Sie einfach Ihren order_by Parameter zu dieser Funktion hinzu. IMO Dies macht Ihre Modelllogik flexibler/wiederverwendbar, da ich davon ausgehe, dass Sie mit der Einstellung order_by im Konstruktor den order_by-Wert für jede Funktion festlegen.

+1

Danke und nicht zu vergessen, Sie können auch die Standardwerte $ param_var = true in der Modellfunktion setzen. – svandragt

+0

Jetzt können Sie, überprüfen Sie diese [Antwort] (http://StackOverflow.com/A/10655252/1027550) – MRodrigues

Verwandte Themen