phphot

php,apache,mysql,linux

Zend framework版blog的demo实例教程
第一步:
  首先去这个网址下载zf.http://framework.zend.com/download
  在apache中建立一个project目录,把zf中的library目录放入project目录.另外需要新建几个目录,新建一个index.php文件和.htaccess文件在www目录里面,结构如下:
  /project/app/controllers/ /project/app/models/ /project/app/views/ /project/www/.htaccess /project/www/index.php /project/library/
  然后需要配置apache的rewrite模块,具体方法自己google了,把下面的字符复制进.htaccess里面
  [Copy to clipboard]CODE: 接着配置apahce的conf,把主路径设置到/project/www/
  第二步:
  在数据库创建表:
  [Copy to clipboard]CODE:CREATE TABLE post (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(50), body TEXT,
  created DATETIME DEFAULT NULL,
  modified DATETIME DEFAULT NULL );
  INSERT INTO post (title,body,created) VALUES (’标题1′, ‘内容1′, NOW()); INSERT INTO post (title,body,created) VALUES (’标题2′, ‘内容2′, NOW()); INSERT INTO post (title,body,created) VALUES (’标题3′, ‘内容3′, NOW()); 接着配置apache的pdo.请看haohappy的大作Zend_Db连接MySQL(附完整代码),看如何配置pdo就可以了.其他不用理会,我跟他方式稍微有点不同
  接着需要写一下/project/www/目录下的index.php,这是唯一的入口点.也可以视为配置文件.
   ? include ‘Zendphp’; require ‘appmodelsdbphp’;//加载db类//include Zend.php后,就可以用loadClass函数指定类名,自动加载需要ZF的类 function __autoload$classZendloadClass$class); } //初始化db,并放入对象寄存器 $db = new dataZendregister‘db’, $db$view = new Zend_View; //设置路径 $viewsetscrīptPath‘appviews’//放入对象寄存器 Zendregister‘view’, $view$controller getInstance//设置路径 $controller‘appcontrollers’//调用dispath()抽取出controller名称和action名称,自动找到适合controller等处理. $controllerdispatch
  上面的注释应该讲解的比较清楚了.Zend::register()可能是比较迷惑的,我比较喜欢叫做对象寄存器,因为这个函数的功能就象计算机的寄存器一样暂时存放数据,要拿的时候随时可以获得.
  你可能已经发现,我们自定义了一个db类,好的,我们来创建一个db类,先来到/project/app/models/目录下,创建一个db.php文件,打入如下代码
   ? class data{
  private $db;
  private $params;
  function __construct$thisparams = array (‘host’ = ‘127.0.0.1′,
  ‘username’ = ‘root’,
  ‘password’ = ‘111111′,
  ‘dbname’
  = ‘blog’$thisdb Zend_Dbfactory‘pdoMysql’, $thisparams);
  }
  }
   第三步:显示数据 来到/project/app/controllers/下,创建一个IndexController.php文件,这里需要注意一下类名和方法名,框架 都有一些约定的写法.IndexController表示名为index的controller,indexAction表示名为index的 action.还不清楚,不要紧.下面还有controller类要写,对比一下就知道什么意思了
  代码如下:
   class IndexController extends {
  private $view;
  private $post;
  function __construct//从对象寄存器中取出对象
  $thisview Zendregistry‘view’$thispost Zendregistry‘db’);
  }
  public function indexAction$thisviewinfo $thispostfindAll//调用View代码"index.php"来显示数据,必须要echo,不然不显示模板.
  echo $thisviewrender‘indexphp’);
  }
  //没有action的情况
  public function noRouteAction$this_redirect‘’);
  }}
  index的controller和action都是默认值.所以要实现了它.这里的Zend::registry(’view’)跟上面的www目录中的index.php里面的Zend::register(’view’, $view);对应,一个存一个取对象.
  回到/project/app/models/目录的db.php写一个函数
   ? class data{
  private $db;
  private $params;
  function __construct$thisparams = array (‘host’ = ‘127.0.0.1′,
  ‘username’ = ‘root’,
  ‘password’ = ‘111111′,
  ‘dbname’
  = ‘blog’$thisdb Zend_Dbfactory‘pdoMysql’, $thisparams);
  }
  function findAll$result $thisdbquery‘SELECT FROM post’//返回所有的结果放入数组
  $row $resultfetchAll();
  return $row;
  }}
  回到IndexController.php文件,就知道了$this-post-findAll();是调用db类中的函数而已.
  然后就来到/project/app/views/目录下了,创建一个index.php文件,实现你的模板.^_^
   html head /head body 浏览帖子/ table
  tr
  thId/th
  th/th
  th发帖时间 /th
  /tr
  ?php foreach ($thisinfo as $post
  tr
  td?php echo $thisescape$post‘id’/td
  td
  a href="/view/?php echo $thisescape$post‘id’"
  ?php echo $thisescape$post‘title’
  /a
  /td
  td?php echo $thisescape$post‘created’/td
  /tr
  ?php }
  /table /body /html
  $this-info来自controller的$this-view对象.$this-escape()是对变量进行过滤,可以不用,不过最好还是加上.
  要浏览怎么做呢?URL的格式:http://localhost/controller/action
  这里你可以用http://localhost/index/index访问.第一个index是controller名,第二个index是action名.
  也许你已经发现了.点击标题链接会出错.^_^.那是因为还没有实现那个功能呢.^_^
  我们需要点击一下标题就看里面的文章,从上面模板已经得知,我们用/view/id的方式传值,那么需要ViewController类和一个能接收id的方法.不过还是先把db中的函数实现了,代码如下:
   ? class data{
  private $db;
  private $params;
  function __construct$thisparams = array (‘host’ = ‘127.0.0.1′,
  ‘username’ = ‘root’,
  ‘password’ = ‘111111′,
  ‘dbname’
  = ‘blog’$thisdb Zend_Dbfactory‘pdoMysql’, $thisparams);
  }
  function findAll$result $thisdbquery‘SELECT FROM post’//返回所有的结果放入数组
  $row $resultfetchAll();
  return $row;
  }
  function getBody$id//返回第一行记录,可以查查zf文档
  $result $thisdbfetchRow"SELECT * FROM post WHERE id =’$id’");
  return $result;
  } }
  好了,需要的函数已经实现了,那么下一步实现controller了,还是在controllers目录中创建一个ViewController.php文件.代码如下:
   ?class ViewController extends {
  private $view;
  private $body;
  function __construct//从对象寄存器中取出对象
  $thisview Zendregistry‘view’$thisbody Zendregistry‘db’);
  }
  //别忘了实现indexAction方法
  function indexAction$this_redirect‘’);
  }
  function __call$id,$args//过滤一下
  $id Zend_FiltergetDigits$id$thisviewdata $thisbodygetBody$id);
  echo $thisviewrender‘viewphp’);
  } }
  这里用__call魔法函数接收$id,往下看,又碰到一个新东西,Zend_Filter::getDigits()用来过滤的,非数字都被过滤掉.
  下面来看看view方面了.还是老规矩,在views下创建一个view.php.
   html head /head bodyh1?php echo $this-escape($this-data[‘title’]);?/h1
  psmallCreated: ?php echo $this-escape($this-data[‘created’]);?/small/p
  p?php echo $this-escape($this-data[‘body’]);?/p /body /html
  这样显示部分就全部完成了.自己浏览一下,浏览方法.上面已经说了.其实直接用http://localhost也可以,因为实现了IndexController.另外还实现了一个noRouteAction的方法
 
阅读更多
个人分类: PHPHOT-ZendFramework
想对作者说点什么? 我来说一句

Zend Framework实例教程

2010年04月23日 147KB 下载

没有更多推荐了,返回首页

不良信息举报

Zend framework版blog的demo实例教程

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭