文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Zend Framework 学习手记

Zend Framework 学习手记

时间:2008-02-27  来源:yueming

   本文的最新版本请见:
http://docs.google.com/Doc?id=dgj5ns3n_206fg6fpv

说明:
   
    这个例子实现的功能很简单,它分成了两个模块,每个模块都有一个控制器,每个控制器都只对应着一个Action,具体可以看目录结构.

内容导航:

  • 目录结构


    • Index文件(启动文件)


    • Mylib_Db文件


    • 配置文件


    • default模块


    • user模块

      1,目录结构


      2,Index文件(启动文件)说明
      set('config', $config);    //注册变量,以后就可以使用Zend_Registry::get('config')来引用了
      $db = Zend_Db::factory($config['db']['adapter'], $config['db']['ini']);   //链接数据库
      Zend_Db_Table::setDefaultAdapter($db);    //注册数据库对象$db,至于为什么要注册,我也不清楚
      print_r($registry->get('config'));
      echo "
      ";
      // setup controller
      $frontController = Zend_Controller_Front::getInstance();  //取得控制器的实例对象
      $frontController->throwExceptions(true);                  //抛出所有异常,这个对于测试非常重要
      //$frontController->setBaseUrl("/webqq");
      //设置控制器目录,"default"和"user"就是模块名,而对应的就是模块的控制器路径
      //实现“/模块名/控制器名/Action名/”形式的路径跳转
      $frontController->setControllerDirectory(array(
            'default' => './app/default/ctrls',
            'user'    => './app/user/ctrls',
            //'news'    => '../application/news/controllers'
      ));
      //据说加了这个就可以适用模块功能,不过好像没有什么用处,不知道是不是我理解错了
      $frontController->setParam('useModules', true);
      //设置路由器,通过这个就可以实现页面的跳转调用,从而找到相应的控制器,
      //例如输入“/user/news/show/”,系统就可以识别user是模块名,news是控制器名,show是Action名
      Zend_Loader::loadClass('Zend_Controller_Router_Rewrite');
      Zend_Loader::loadClass('Zend_Controller_Dispatcher_Standard');
      $frontController->setRouter(new Zend_Controller_Router_Rewrite())
          ->setDispatcher(new Zend_Controller_Dispatcher_Standard());   
      print_r($frontController);
      echo "
      ";
      // run!
      $frontController->dispatch();
      3,Mylib_Db类
      _name = $config['db']['prefix'].$this->_name;
              parent::__construct();     //调用父类的构造方法
         
          }
      }
      ?>
      4,配置文件
      5,default模块
          作为例子,这个模块只有一个功能,重要的文件只有两个:
      (1)一个是控制器(Index控制器)文件
      initView();                /*视图初始化,产生视图对象$this->view,这样在视图文件中就可以这样使用:例如在这里设置好$this->view->title之后,在视图文件中就可以用$this->title来获得title的值了*/
          $this->view->baseUrl = $this->_request->getBaseUrl();   /*获得url,在视图中需要加载其他文件(例如JS,CSS文件等)时要用*/
          Zend_Loader::loadClass('Default_User');     //加载model类
          $this->_user = new Default_User();
      }
      function indexAction(){
          $this->view->title = "webqq";
          $this->view->users = $this->_user->fetchAll();
          $this->view->render();           //更新视图
      }
      function noRouteAction(){
          $this->_redirect("/");
      }
      }
      ?>
      (2)另一个是model文件
      当然,少不了的还有一个视图文件“views/index/index.phtml”,就不详述了。
      6,user模块
          和上面模块的设置基本相同,不同的只有控制器类的类名,需要加上模块名作为前缀,例如“User_IndexController”。(作为例子,这两个模块的功能完全一样)这里就不再详述了。
      7,常见错误
      (1)"Uncaught exception 'Zend_View_Exception' with message 'script 'index/checklogin.phtml' not found in path。。。。。"就是说找不到相应的视图文件,就算我的action是什么也没做的,在相应的视图文件夹里加上'index/checklogin.phtml'应该就没事了。
      (2)“Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("Index_IndexController")' in 。。。。。”找不到相应的controller文件,可能是路径错了,或者controller的类名写错了。
      (3)数据库操作的乱码问题
      解决办法:在获取数据库链接对象的后面(一般在启动文件中)加上“$db->query("SET NAMES gbk");”,其中gbk你可以设置为你需要的字符集,例如utf-8等。

      [url=http://docs.google.com/View?docid=dgj5ns3n_206fg6fpv][/url]


  • 相关阅读 更多 +
    排行榜 更多 +
    XLM币最具爆发力的安全交易所币安binance下载

    XLM币最具爆发力的安全交易所币安binance下载

    金融理财 下载
    XEM币最安全隐私链的全球交易所币安binance下载

    XEM币最安全隐私链的全球交易所币安binance下载

    金融理财 下载
    WAVES币最新上线的优质交易所币安binance下载

    WAVES币最新上线的优质交易所币安binance下载

    金融理财 下载