2012-06-20 2 views
0

Вот моя проблема в codeigniter MVC.codeigniter mvc, разделение модели

Предположим, у меня есть 3 модели: (пользователи, электронная почта, платежи). Когда кто-то заплатил каким-то образом, контроллер вызывает некоторый метод оплаты, этот метод может быть вызван и с других контроллеров.

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

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

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

Но поскольку мне нужно запустить метод этой модели в некоторых контроллерах, я должен повторить эти строки, и это не совсем правильный аспект в моей точке.

Вопрос: Должен ли я использовать другие модели внутри модели или использовать другие модели внутри модели (в этой опции, если я хочу повторно использовать эту модель, я должен ее изменить, если другие таблицы изменились, что не так), или есть Любым другим путем?

Основная проблема заключается не в том, что это просто пример ситуации. Я также определил некоторую функцию, которая делает эту вещь и вызывается из контроллеров, но это тоже неправильно.

+0

, если все методы были на одной и той же модели, у меня не было никаких проблем. но это тоже неправильно. – masphp

+0

Я использую CI в течение 3 месяцев, и я столкнулся с некоторым ограничением, так что вы думаете, если я использую фреймворк zend, будет ли он полезным в этом случае и другими ограничениями, то есть: определение многоуровневых контроллеров – masphp

ответ

1

Положить все это в библиотеку.

Таким образом, ваш контроллер вызывает библиотеку для «оплаты» и передает некоторые детали. Ваша библиотека затем выполняет все функции, вы описываете выше - то есть называет модель оплаты, отправляет электронную почту и т.д. и т.п.

You can learn more about codeigniter libraries here

+0

Спасибо, это вариант, может вы говорите мне, что в этом случае отличается от функции и библиотеки, и если я могу использовать функцию в этом подходе, все-таки я хотел поместить всю логику в класс в этом случае Model. – masphp

1

Вот отличное решение. Определите My_model.php в приложении/ядре.

Class My_model extends CI_Model{ 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function get($where , $table){ 
     $query = $this->db->get_where($table, $where); 
     return $query->result(); 
    } 
} 

Теперь модель должна расширять My_model вместо CI_Model. Теперь вы можете назвать это так. Предположим, что в вашем контроллере вы загрузили модель электронной почты и хотите получить доступ к модели пользователя.

$where = array('user_id', $id); 
$table = 'user'; 
$this->email->get($table, $where); 

Для получения более подробной информации читайте эту книгу
http://codeigniter.com/forums/viewthread/211821/

+0

Это какое-то решение, но это не точная точка, которую я ищу. – masphp