免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1481 | 回复: 0
打印 上一主题 下一主题

Zend Framework 学习手记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-27 01:14 |只看该作者 |倒序浏览
   本文的最新版本请见:
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]


    本文来自ChinaUnix博客,如果查看原文请点:[url]http://blog.chinaunix.net/u/16928/showart_484349.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP