PHP &

3 Cevap php

Benim denetleyicisi içinde bir model başlatmak için aşağıdaki kodu kullanıyorum:

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

Bu modeli yapıcı bir parametre recieves böylece şekilde yukarıdaki satırı değiştirmek mümkün mü? Ben modeli kurucu aşağıdaki kodu kullanmak istiyorum:

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

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

Benim modeli sınıfları yeniden böylece bu çok yararlı olacaktır. Teşekkürler.

UPDATE: (from one of the answers, my original question is solved..thanks!) Just to explain why I wanted to do this: the idea is to be able to reuse a model class. So basically to give a simple example I would like to be able to pass an "order_by" variable to the model class so that I can reuse the logic in the model class (and dynamically change the order-by value in the sql) without having to create a separate class or a separate function.

Bu kötü tasarım mı? Eğer öyleyse bunun yerine bunu nasıl böyle bir şey yapmak değil neden açıklayabilir ve misiniz?

3 Cevap

Ben bunun için mantık görüyorum, ama ben senin veritabanı ihtiyaçları için Object-Relational Mapping bakarak önerebilir. Ben son zamanlarda kullanarak oldum DataMapper denilen CodeIgniter için bir kullanıcı-yapımı ORM kütüphanesi var. Siz nesneler olarak kontrolörleri tabloları kullanabilirsiniz ve bu sorun için daha iyi bir uyum olabilir.

Sen load fonksiyonu aracılığıyla parametreleri geçemez. Sen gibi bir şey yapmak gerekir:

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

Modelde:

function my_constructor($param_var) {
...
}

Güncelleme Yanıt:

Eğer model işlevi aradığınız zaman sadece order_by değerini geçebileceği. Sana $this->model_name->get($my_id); Sadece bu işlev için order_by parametresi eklemek gibi bir şey var, denetleyici eylem varsayarak yaşıyorum. Bunu yaptıklarını yolu, ben yapıcı order_by ayarı varsayıyorum her fonksiyon için order_by değerini ayarlayın çünkü IMO bu yeniden / modeliniz mantığı daha esnek hale getirir.

Kullanmak yerine DataMapper i bu DataMapper artık Ruby içine değiştirilmiştir daha fazla muhafaza edilir, çünkü IgnitedRecord kullanımı önerilmektedir