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的方法
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值