как достичь MVC в моем Zend Framework - PullRequest
0 голосов
/ 13 марта 2012

В настоящее время я делаю проект в Zend. То, как я работаю, работает отлично, но я уверен, что это не тот способ, которым я должен заниматься, я имею в виду, что я не следую MVC, и я хочу применить MVC в своем приложении Zend.Я вставляю код одного простого модуля, который опишет, что я делаю. Пожалуйста, исправьте меня, где я делаю ошибки.

мой контроллер

class ContactsController extends Zend_Controller_Action{

   public function contactsAction(){
    if(!Zend_Auth::getInstance()->hasIdentity()){
          $this->_redirect('login/login');
      }
      else{

       $request                = $this->getRequest();
       $user                   = new Zend_Session_Namespace('user');
       $phone_service_id       = $user->p_id;

       $instance               = new Contacts();
       $select                 = $instance->Get_Contacts($p_id);

       $adapter                = new Zend_Paginator_Adapter_DbSelect($select);
       $paginator              = new Zend_Paginator($adapter);
       .
               .
       //more code
   }

PLZ обратите внимание на эту 2 строку в моем контроллере

$instance               = new Contacts();
$select                 = $instance->Get_Contacts($pid);

это мой класс контактов в моделях

class Contacts extends Zend_Db_Table{

function Get_Contacts($p_id){
    $DB = Zend_Db_Table_Abstract::getDefaultAdapter();

    $select = $DB->select()
         ->from('contact', array('contact_id','contact_first_name','contact_mobile_no','contact_home_no','contact_email','contact_office_no'))
         ->where('pid = ?', $p_id)
         ->order('date_created DESC');

         return $select;
    }
    }

после этого я просто присваиваю свой результат моему взгляду.

обратите внимание, пожалуйста так как он работает, но в моем классе нет личных данных, мой класс не является черным шрифтом. Нет SETTERS И GETTERS. Как я могу сделать мой код, который лучше всего подходит для MVC и OOP ??

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Самый простой ответ: вы уже почти MVC. Вы используете Zend_Controller_Action, чтобы получить некоторые данные и передать их на слой представления, где вы отображаете HTML. Единственная недостающая часть - это ваша модель, которая перепутана между контроллером и вашим шлюзом данных (где вы реализовали шаблон шлюза табличных данных, это вещь Zend_Db_Table).

Я дал довольно подробное объяснение в ответе на другой вопрос , как бы я правильно настроил отношения между Контроллером и Моделью. Я также объединил это с формой для обработки ввода данных, фильтрации и проверки. Затем, чтобы объединить некоторые общие функции, я ввел уровень обслуживания между моделью и контроллером.

С помощью контроллера вы выполняете некоторые действия (выводите список всех моих контактов, создаете новый контакт, изменяете контакт), и модель содержит только данные (идентификатор, имя, телефон, адрес). Служба помогает группировать некоторые функции (findContactByName, findContactById, updateContactWithForm).

Если вы знаете, как разделить Контроллер, Режим, Форму и Сервис, ваш контроллер может выглядеть примерно так:

class ContactsController extends Zend_Controller_Action
{
    public function indexAction ()
    {
        if (!$this->hasIdentity()) {
            $this->_redirect('login/login');
        }

        $service   = new Application_Service_Contacts;
        $contacts  = $service->getContacts();
        $paginator = $service->getPaginator($contacts);

        $this->view->paginator = $paginator;
    }

    protected function hasIdentity ()
    {
        return Zend_Auth::getInstance->hasIdentity();
    }
}

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

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

0 голосов
/ 14 марта 2012

Имейте в виду одну вещь, когда вы изучаете новые технологии, поэтому сначала прочитайте их собственную документацию.Никто не может объяснить лучше, чем они.Во-первых, это трудно понять, но когда вы изучите это, вы привыкнете, и тогда вы полюбите его, как я Официальный сайт Zend

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...