Как правильно сгруппировать мои методы в одной модели?

0

Извините за титул, может быть, я не могу описать это хорошо. Но вот что я хочу:

Теперь, если я создаю модель m.php и поместил ее в папку моделей со следующим кодом:

class m extends CI_Model {

  public function username() {
    print "john doe";
  }

  public function password() {
    print "ABC123";
  }

}

Теперь я могу просто сделать следующее в контроллере:

$this->load->model("m");
$this->m->username(); // prints john doe
$this->m->password(); // prints ABC123

Теперь мне нужно сделать это так, чтобы я мог называть эти методы выше:

$this->m->genralinfo->username(); // prints john doe

$this->m->privacy->password(); // prints "ABC123"

Как я могу это достичь? Я хочу сделать это, чтобы сгруппировать методы, специфичные для чего-то все вместе, это помогает мне лучше структурировать код.

** Я знаю, что можно создать новую модель для каждой группы методов, но все, что я хотел бы сохранить все, что связано с пользователем внутри одной модели **

Возможно ли это с помощью одной модели?

  • 0
    Вы могли бы создать классы в модели, может быть?
  • 0
    Это то, что я пытался сделать @sanketh, но, к сожалению, похоже, что это не может быть сделано таким образом (неожиданный класс в ...)
Показать ещё 2 комментария
Теги:
model-view-controller
codeigniter
hmvc

3 ответа

1
Лучший ответ

Я думаю, что ты хочешь этого

class m extends CI_Model
{
    public $genralinfo;
    function __construct()
    {
        parent::__construct();
        $this->genralinfo=new Genralinfo();
    }

}
class Genralinfo
//class Genralinfo extends CI_Model//you may extend CI_MODEL too
{
    public function username() {
        print "john doe";
    }

    public function password() {
        print "ABC123";
    }

}
1

Создайте функцию "общая информация" и "конфиденциальность", которые получают параметры. вызовите его в контроллере.

$m->generalinfo('username');

в модели

public function generalinfo($v='') {
    switch($v){
     case 'username':
        $ret=$this->username; //you would have to fill the object first
        break;
     case 'name':
        $ret=$this->name; //same here
        break;
     default:
        $ret=Array();
        $ret['username']=$ret=$this->username;
        $ret['name']=$ret=$this->name;
   }
    return $ret;
} 

И позаботьтесь о выходе в представлении. В этом примере вы получите либо строку с конкретной информацией, которую вы запросили. Или массив всех общих данных. Вам придется заботиться об этих разных случаях. Проверьте, например, возврат в контроллер.

Но таким образом вы также можете сделать ajax-вызов и преобразовать возврат в JSON и нажать его на модальный или любой другой.

0

Понял. Я положил это внутри модели

public $info;
public function __construct() 
{ 
    parent::__construct();
    $this->info = (object) array('foo' => 'bar', 'property' => 'value'); 
} 

а затем просто:

echo $class->obj->foo;//outputs bar  

Ещё вопросы

Сообщество Overcoder
Наверх
Меню