学习 Zend Framework 框架连载(一)

来源:互联网 发布:淘宝体检中心在哪 编辑:程序博客网 时间:2024/05/18 02:21

前言:Zend Framework 对于有些新手来说.觉得很难,其实只要明白其中的一些原理就可以,轻松自在的学好它.
对于一些新手,写程序,往往,没办法有规划,而用Zend Framework 你可以让你少走很多弯路!好了废话少说.开始学习Zend Framework ,以下Zend Framework 简称:ZF

第一章:Zend Framework简单配置,测试文件!

1.
首先去下载最新版本的 Z F[url] http://framework.zend.com/download/zip[/url](注意.好象官方的0.15的版本有点问题, SVN里面的,我放到自己的空间上了:http://www.phpwb.com/library.rar

2.
解压后把library文件夹放在网站根目录下

这里我讲解的是让ZF在子目录下运行.
test子目录下建立如下文件夹
test
目录下建立
  Application
   Controllers
   Models
   Views

3.
写一个index.php放在test目录下index.php

复制PHP内容到剪贴板

PHP代码:


<?
<?
set_include_path('../library');//根目录下的库文件
include 'Zend.php';
function __autoload($class)//自动加载类
{
  Zend::loadClass($class);
}
$view = new Zend_View;
$view->setScriptPath('./Application/Views');  //放显示的文件的地方
Zend::register('view', $view);              //注册对象

//下面这些的作用是在子目录下。新手不管它,能用就行
$router = new Zend_Controller_RewriteRouter();
$controller = Zend_Controller_Front::getInstance();
$controller->setRouter($router);

$controller->setControllerDirectory('./Application/controllers');//简单的说是放我们设计php控制文件的地方
$controller->dispatch();
?>

4.controllers写一个Indexcontroller.php(注意,一定要记得是:Indexcontroller.php,不要保存错了变成index.php)

Indexcontroller.php

复制PHP内容到剪贴板

PHP代码:


<?
//首页控制
class IndexController extends Zend_Controller_Action 
{
      
    public function indexAction()
    {
    $view=Zend::registry('view');//取出对象
    echo $view->render('test.php');//显示数据
    }
     public function noRouteAction() //这个在每个IndexController都要记得加上去。才不会出现错误!   
      {       
       $this->_redirect('../');//转到首页
      }

}
?>

5.Views文件夹里建立个test.php和上面的文件名一样

test.php

复制PHP内容到剪贴板

PHP代码:

这是一个简单的ZF例子!
这里你想写什么都行.^_^

6.打开浏览器运行下http://localhost/test/index.php

是不是看到上面的test.php里面的内容...高兴吧....^_^ ^_^


7.
传递变量i
高兴的话,接着下一个传递变量i的值得512
http://localhost/test/index.php/Love/index/i/512

I.
controllers下写一个Controller.php

LoveController

复制PHP内容到剪贴板

PHP代码:


<?php
//传递512
class LoveController extends Zend_Controller_Action 
{
      
    public function indexAction()
    {
     $view=Zend::registry('view');//取出对象
     $love=$this->_getParam('i');//取得i的值512;
     $view->i="$love";
     echo $view->render('love.php');//显示512的数据
    }

   function __call($action,$args)//这个除了在IndexControlle不需要放。其他的每写个,都要放。。
    { 
     $this->_redirect('../');
    }

}
?>

II.同样在Views文件夹里面建立个love.php
love.php

复制PHP内容到剪贴板

PHP代码:


<?php echo $this->escape($this->i); ?>//escape是一个过滤函数,把数据过滤.php里面的htmlspecialchars()一样

III.在浏览器打开:http://localhost/test/index.php/Love/index/i/512

是不是看到浏览器上显示出512


好了。今天就到这里.有什么不明白的地方,可以提出来..^_^
下一章预告:
ZFmysql数据库连接操作以及一些技巧性操作!
(
这一章,数据库操作连接可以去看下,论坛上的文章*,主要是看下技巧性操作)

第二章:ZFmysql数据库连接操作以及一些技巧性操作!

1.正确加载了PDO扩展.
以下引用Haohappy 

引用:

在看这些之前请确保你正确加载了PDO扩展。

作法是编辑php.ini
手动增加下面这两行(前面要没有分号;):
extension=php_pdo.dll
extension=php_pdo_mysql.dll

然后要把extension_dir
指向php_pdo.dllphp_pdo_mysql.dll所在目录,如
extension_dir = "C:/php5/ext"

OK,let's go..

2.连接mysql数据库
本人的做法是把所有的数据库操作在进行2次封装,
这样的好处是,逻辑性很强纯属个人观点!

上一章中也许有人会问Models文件夹有什么用.
我是用来放一些类,和数据库操作类.

I.Models文件夹下建立Datebase.php

复制PHP内容到剪贴板

PHP代码:

Datebase.php
<?php
class Database
 {
   private $db;
   public function __construct() 
        {
          Zend::loadClass('Zend_Db');
          $params = array ('host' => 'localhost',                //主机
                       'username' => 'root',                    //用户名
                       'password' => '123456',               //密码
                       'dbname'   => 'xgwork');              //数据库名称
          $this->db = Zend_Db::factory('pdo_Mysql', $params);
        }
  public function insert($table,$row)//插入数据行
       {
         $this->db->insert($table, $row);
         $id = $this->db->lastInsertId();
         return  $id;
       }
  public function onerow($table,$uid,$id)//取得 单个数据行
       {
        $rows=$this->db->fetchRow("SELECT * FROM `$table` where $uid = :id" , array('id' =>$id));
        return $rows; 
       }
  public  function Del($table,$uid,$id) // 删除特定行
        {
         $where = $this->db->quoteInto("$uid = ?", "$id");
         return $this->db->delete($table, $where);

        }
   public  function getUpdate($table,$set,$uid,$id) // 更新特定行
        {
         $where = $this->db->quoteInto("$uid = ?", $id);
         return $this->db->update($table,$set,$where);

        }
    public  function count($table,$uid,$id,$where='T') // 特定行数据计算
        {
         $select=$this->db->select();
         $select->from($table, 'COUNT(*)');
         $select->where(" $uid= ? ",$id);
         if($where=='T')
         {
         $select->where(" lend_estate= ? ",'1');
         }
         $total=$this->db->fetchOne($select);  
         return $total;
        } 
   public  function post() //防止外部提交数据
        {
         $servername=$HTTP_SERVER_VARS['SERVER_NAME']; 
         $sub_from=$HTTP_SERVER_VARS["HTTP_REFERER"]; 
         $sub_len=strlen($servername); 
         $checkfrom=substr($sub_from,7,$sub_len); 
         if($checkfrom!=$servername)
         { 
         echo "<script>alert(/"数据来源有误!请从本站提交!/");</script>";
         echo "<script>javascript:history.back()</script>";
         exit; 
         }
        }
    function getIP()//获得ip
        {
            if(getenv('HTTP_CLIENT_IP'))
            {
                $ip=getenv('HTTP_CLIENT_IP');
            }
            else if(getenv('HTTP_X_FORWARDED_FOR'))
            {
                $ip=getenv('HTTP_X_FORWARDED_FOR');
            }
            else if(getenv('REMOTE_ADDR'))
            {
                $ip=getenv('REMOTE_ADDR');
            }
            else
            {
                $ip=$_SERVER['REMOTE_ADDR'];
            }
            return $ip;
        }
 }
 ?>


注意:上面的只是部分的。需要的操作可以自己添加....

II.index.php里面注册对象

复制PHP内容到剪贴板

PHP代码:


<?
set_include_path('../library');//根目录下的库文件
include 'Zend.php';
include './Application/Models/Datebase.php';  //数据库操作类
function __autoload($class)//自动加载类
{
  Zend::loadClass($class);
}
$view = new Zend_View;
$view->setScriptPath('./Application/Views');  //放显示的文件的地方
Zend::register('view', $view);              //注册对象

$db = new Database();
Zend::register('db', $db);                                      // 注册数据库超作对象到对象仓库

//下面这些的作用是在子目录下。新手不管它,能用就行
$router = new Zend_Controller_RewriteRouter();
$controller = Zend_Controller_Front::getInstance();
$controller->setRouter($router);

$controller->setControllerDirectory('./Application/controllers');//简单的说是放我们设计php控制文件的地方
$controller->dispatch();
?>

III.数据库操作.

controllers下写一个Lovecontroller

复制PHP内容到剪贴板

PHP代码:


<?php
//数据库操作
class LoveController extends Zend_Controller_Action 
{
      
    public function indexAction()
    {
      $db=Zend::registry('db');//取出对象
      $row = array 
      (
          'love_name'        => '',
       );
      if($db->insert('love',$row))//写入数据库,love是表,$row是数组,返回插入的id
        {
        die('恭喜您,操作成功!,按这里<a href=javascript:history.back() style="color:#FF0000;font-size:12px">  </a>');
        }
    }

   function __call($action,$args)//这个除了在IndexControlle不需要放。其他的每写个,都要放。。
    { 
     $this->_redirect('../');
    }

}
?>

    以上可以看出.这样操作起来,方便.只要传入,数据库的表,和写入的数组.就可以。
如要取得单个数据行只要$db->onerow($table,$uid,$id)//传入的表,where的条件
以后做项目的时候,只要这样做.省得每次都得写sql语句.
当然了。对于一些复杂性的超作,还得另外写的。对于一般性的语句可以这样写的。具体的一些sql的详细操作,可以看下手册.www.phpeye.com

  一般的项目用DB类操作,已经够你用的.

第三章,Zend Framework 常见过滤数据的方法!

我们知道,php中最常用的传值方式是:$_GET ,$_POST .
而好多初学者,经常直接$_GET['name'],$_POST['name']这样直接使用了。
ZF提供的一些常见数据的过滤方法,使得您的数据写入数据库更加的安全.

1.$_GET传值过滤.

复制PHP内容到剪贴板

PHP代码:


<?php
Zend::loadClass('Zend_Filter_Input');
class UserController extends Zend_Controller_Action
{
public  function indexAction()
    {
     ...
    ... 
    }

public function __call($id,$arguments)
     {
    $id=Zend_Filter::getDigits($id)
    }
}

?>

getDigits是只取数字的,也就是过滤掉其他的不是数字的字符.

如你在url中打入http://localhost/User/33ete/

而这里你echo $id;的时候就会只取33这个数字了。.

2.$_POST方法

复制PHP内容到剪贴板

PHP代码:


<?php
Zend::loadClass('Zend_Filter_Input');
class UserController extends Zend_Controller_Action
{
public  function indexAction()
    {
     $filterPost = new Zend_Filter_Input($_POST);
     $id=$filterPost->getDigits('id');
     //一样得到表单传过来的值'id'
    }

public function __call($action,$arguments)
     {
    $this->_redirect('../');
    }
}

?>

其实一样的。只是换了下方式而已

 

下面是列出一些常用的过滤数据的方法.

复制PHP内容到剪贴板

PHP代码:


<?php
$a = Zend_Filter::getAlpha('love512you');
//得到的数据是:loveyou
$id=Zend_Filter::getDigits('512love');
//得到的数据是512
$a=Zend_Filter::getDir('C:/Zend')
//得到的数据是: c:/
$a=Zend_Filter::getAlnum('512love我爱你');
//得到数据 512love
$a=Zend_Filter::getInt('512love我爱你');
//得到数据512 相当于(int)

....还有很多。具体可以看下原代码或者手册.. 
?>

原创粉丝点击