1

我在zend框架中制作了简单的数据库应用程序。我制作了用户类并为数据库交互定义了不同的函数。这个函数是从控制器类调用的。但是我必须声明每个时间类对象来调用用户类的方法在每个动作中。我如何一次声明用户类对象并在控制器的所有动作方法中使用。这是我的控制器页面类 UserController 扩展 Zend_Controller_Action {

    public function init()
    {
         /* Initialize action controller here */
        Zend_Session::start();

    }

     public function indexAction()
    {

        $title = Zend_Registry::get('title');
        $this->view->assign('name', 'Wiwit');
        $this->view->assign('title', $title);
    }


    public function logoutAction()
    {

        Zend_Session::destroy();
        $this->redirect("/user/login");

    }

     public function registerAction()
    {

        $this->view->assign('title','Register');
        $request = $this->getRequest();
        $this->view->assign('action', $request->getBaseURL()."/user/register");
        if($request->isPost()) 
        {
        $data = array('first_name' => $request->getParam('first_name'),
                      'last_name' => $request->getParam('last_name'),
                      'user_name' => $request->getParam('user_name'),
                      'password' => $request->getParam('password')
                      );

        $user = new Application_Model_User();
        $rows_affected=$user->user_insert($data);
        $this->redirect("/user/login");
        }

    }
    public function loginAction()
        {
            if(isset($_SESSION['username']))
            {
                $this->redirect("/user/home");
            }
            $this->view->assign('title','Register');
            $request = $this->getRequest();
            $this->view->assign('action', $request->getBaseURL()."/user/login");
            if($request->getParam('msg'))
            {

                $this->view->msg='username or password is invalid';
            }
            if($request->isPost()) 
            {
                $data = array(
                              'user_name' => $request->getParam('user_name'),
                              'password' => $request->getParam('password')
                              );

                $user = new Application_Model_User();
                $result=$user->user_login($data);
                if(empty($result)){

                $this->redirect("/user/login/msg/login failed");

            }
            else{
                $_SESSION['username']=$result->user_name;

                $this->redirect("/user/home");

            } 

            }
        }

        public function homeAction()
        {
            if(isset($_SESSION['username']))
            {
                $this->view->title='home';
                $request = $this->getRequest();
                $user = new Application_Model_User();
                $result=$user->user_grid();
                $this->view->rows=$result;
            }
            else
            {
                $this->redirect("/user/login");
            }
        }

         public function editAction()
        {

         $request = $this->getRequest();
         $id= $request->getParam("id");

        $user = new Application_Model_User();
        $result=$user->user_edit($id);

        $this->view->assign('data',$result);
        $this->view->action= $request->getBaseURL()."/user/update";

    }


    }


and here is my user class

<?php

class Application_Model_User extends Zend_Db_Table
{

      public function user_insert($data)    
      {   

            global $DB;  
         $rows_affected = $DB->insert('user', $data);
        return  $rows_affected;
      }

      public function user_login($data)    
      {       

        $u_name=array_shift($data);
        $pass=array_shift($data);
        $select = $this->_db->select()
                        ->from('user')
                        ->where("user_name = ?",$u_name)
                        ->where("password = ?",$pass);
                        $result = $this->getAdapter()->fetchRow($select);
                        return $result;


      }

       public function user_grid()    
      {  
         global $DB;    
        $sql = 'SELECT * FROM user';
        $stmt = $DB->query($sql);
        $result = $stmt->fetchall();
        return $result;
      }

      public function user_edit($data)    
      {       

        $select = $this->_db->select()
                        ->from('user')
                        ->where("id = ?",$data);
                        $result = $this->getAdapter()->fetchRow($select);
                        $data = (array) $result;
                        return $data;


      }

      public function userupdate($data,$id)    
      {   

        global $DB;  
        $rows_affected =$DB->update('user', $data,'id = '.$id);
        return  $rows_affected;
      }

       public function userdelete($id)    
      {   

        global $DB;  
        $rows_affected =$DB->delete('user','id = '.$id);
        return  $rows_affected;
      }
}
?>
4

1 回答 1

1

您可以在 init() 方法中创建用户对象,并将其存储为类变量。

public function init()
{
     /* Initialize action controller here */
    Zend_Session::start();
    $this->user = new Application_Model_User();
}

然后它可以在任何操作方法中使用。

public function homeAction()
{
    if(isset($_SESSION['username']))
    {
        $this->view->title='home';
        $request = $this->getRequest();
        $result = $this->user->user_grid(); // changed
        $this->view->rows=$result;
    }
    else
    {
        $this->redirect("/user/login");
    }
}
于 2013-08-21T06:46:21.293 回答