- 论坛徽章:
- 0
|
本文的最新版本请见:
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 |
|