Как я могу сделать свой код более MVC, как в Zend Framework - PullRequest
0 голосов
/ 03 февраля 2012

Я новичок в ZF.Я понятия не имею о потоке ZF НАМНОГО.То, что я делаю, - это то, что я кодирую свою работу в классе моделей тоже в своих действиях контроллеровЭто работает довольно хорошо, но мне это не нравится.Я хочу стиль ZF.Ниже мой код, я имею в виду мое единственное действие на моем контроллере.Не могли бы вы сделать ретушь, сделав класс модели и вставив туда код.И как я могу вызвать этот класс?Как я могу передать переменные там?И как я могу получить результат оттуда и назначить этот результат моему представлению?

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

       $request = $this->getRequest();
       $phone_service_id  =  $request->getParam("id");
       $registry = Zend_Registry::getInstance();  
       $DB = $registry['DB'];

       $select = $DB->select()
         ->from('CALL_LOG', array('caller_name','call_number','call_start_time','call_duration','call_direction'))
         ->where('phone_service_id = ?', $phone_service_id)
         ->order('date_created DESC')
         ->limit(0,9);

       $adapter = new Zend_Paginator_Adapter_DbSelect($select);
       $paginator = new Zend_Paginator($adapter);
       $page=$this->_getParam('page',1);
       $paginator->setItemCountPerPage(10);
       $paginator->setCurrentPageNumber($page);
       $this->view->paginator=$paginator;
       $page = $paginator->getCurrentPageNumber();
       $perPage = $paginator->getItemCountPerPage();
       $total = $paginator->getTotalItemCount();
       $A = ($page - 1) * $perPage + 1;
       $B = min($A + $perPage - 1, $total);
       $C = $total;
       $this->view->assign('url', $request->getBaseURL());
       $this->view->assign('total',$total );
       $this->view->assign('page',$page );
       $this->view->assign('phone_service_id',$phone_service_id );
       $this->view->assign('A',$A );
       $this->view->assign('B',$B );
       $this->view->assign('C',$C );
       }
    }

, пожалуйста, отредактируйте мой код. Спасибо за участие

Отредактировано :: У меня есть модель добавления, которая похожа наЭто

class Application_Model_Services extends Zend_Db_Table_Abstract{

protected $_name = 'albums';

    public function get_services($user_id,$DB){
    $user_id = (int)$user_id;

     $select = $DB->select()
     ->from(array('p' => 'phone_service'))
     ->join(array('u' => 'user_preferences'), 'u.phone_service_id = p.phone_service_id')
     ->where('u.user_preferences_name = ?', 'is_user_package_active')
     ->where('p.user_id = ?', $user_id);

     $adapter   = new Zend_Paginator_Adapter_DbSelect($select);
     $paginator = new Zend_Paginator($adapter);

    if (!$paginator) {
        throw new Exception("Could not find row ");
    }
    return $paginator->toArray();
    }
   }
 ?>

, чем изменить мое действие на это

  public function controlpannelAction(){
      if(!Zend_Auth::getInstance()->hasIdentity()){
          $this->_redirect('login/login');
      }
      else{
      $data = Zend_Auth::getInstance()->getStorage()->read();  
      $user_id = $data->user_id;
      $registry = Zend_Registry::getInstance();  
      $DB = $registry['DB'];

       $services = new Application_Model_Services();
       $paginator = $services->get_services($user_id,$DB);


     $page=$this->_getParam('page',1);
     $paginator->setItemCountPerPage(10);
     $paginator->setCurrentPageNumber($page);
     $this->view->paginator=$paginator;
     $request = $this->getRequest();
     $this->view->assign('url', $request->getBaseURL());
     $page = $paginator->getCurrentPageNumber();
     $perPage = $paginator->getItemCountPerPage();
     $total = $paginator->getTotalItemCount();
     $A = ($page - 1) * $perPage + 1;
     $B = min($A + $perPage - 1, $total);
     $C = $total;
     $this->view->assign('A',$A );
     $this->view->assign('B',$B );
     $this->view->assign('C',$C );
      }

, но это дает ошибку

Warning: Zend_Loader::include_once(Application\Model\Services.php) [function.Zend-Loader-include-once]: failed to open stream: No such file or directory in C:\xampp\htdocs\xyz\library\Zend\Loader.php on line 146

Warning: Zend_Loader::include_once() [function.include]: Failed opening 'Application\Model\Services.php' for inclusion (include_path='C:\xampp\htdocs\phoggi/library;.;C:\xampp\php\pear\') in C:\xampp\htdocs\xyz\library\Zend\Loader.php on line 146

Fatal error: Class 'Application_Model_Services' not found in C:\xampp\htdocs\xyz\application\controllers\LoginController.php on line 61

Есть идеи, сэр???

1 Ответ

2 голосов
/ 03 февраля 2012

Не могу обработать ваш код.Вы должны много чего здесь происходит.Если вы хотите решить одну проблему за один раз, хорошо.Я дам вам несколько советов, которые помогли мне, когда я был новичком в ZF.

  • RTFM - Сделайте быстрый старт в документации и обратите внимание.Я не имею в виду читать это.Я имею в виду, напечатайте его и сделайте так, чтобы оно работало.
  • Сделайте учебное пособие Роба Аллена на Учебное пособие по ZF 1.11 , так же напечатайте его и сделайте так, чтобы оно работало.
  • Положите все, что вам нужноможно в application.ini.(Настройки БД, пространства имен библиотек ...)
  • При работе с учебными курсами обратите пристальное внимание на использование интерфейса командной строки Zend_Tool.Это сделает все очень просто, и, по крайней мере, у Netbeans и Zend Studio есть интерфейс для этого.
  • Если вы не планируете использовать стороннюю ORM, узнайте о моделях Application_Model_DbTable_ и о том, как они работают и что получают расширяющие Zend_Db_Table_Abstractты.
  • И последнее.Чтобы присвоить данные представлению, используется общий синтаксис $this->view->data = $data; для отображения этих данных в сценарии представления - <?php echo $this->data ?>

Другие бесплатные ресурсы: ZF Manual ИСПОЛЬЗУЙТЕ ЭТО !!! Survive the Deepend, бесплатная онлайн книга Модели, таблицы и взаимосвязи в ZF

...