学习 Zend Framework 框架连载(一)
前言: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代码:
//传递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代码:
escape($this->i); ?>//escape是一个过滤函数,把数据过滤.和php里面的htmlspecialchars()一样
III.在浏览器打开:http://localhost/test/index.php/Love/index/i/512
是不是看到浏览器上显示出512
好了。今天就到这里.有什么不明白的地方,可以提出来..^_^
下一章预告:
ZF中mysql数据库连接操作以及一些技巧性操作!
(这一章,数据库操作连接可以去看下,论坛上的文章*,主要是看下技巧性操作)
第二章:ZF中mysql数据库连接操作以及一些技巧性操作!
1.正确加载了PDO扩展.
以下引用Haohappy 的
引用:
在看这些之前请确保你正确加载了PDO扩展。
作法是编辑php.ini
手动增加下面这两行(前面要没有分号;):
extension=php_pdo.dll
extension=php_pdo_mysql.dll
然后要把extension_dir
指向php_pdo.dll及php_pdo_mysql.dll所在目录,如
extension_dir = "C:/php5/ext"
OK,let's go..
2.连接mysql数据库
本人的做法是把所有的数据库操作在进行2次封装,
这样的好处是,逻辑性很强! 纯属个人观点!
上一章中也许有人会问Models文件夹有什么用.
我是用来放一些类,和数据库操作类.
I.在Models文件夹下建立Datebase.php
复制PHP内容到剪贴板
PHP代码:
Datebase.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 "";
echo "";
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代码:
//数据库操作
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('恭喜您,操作成功!!,按这里 返 回');
}
}
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代码:
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代码:
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代码:
$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)
....还有很多。具体可以看下原代码或者手册..
?>
还有更多过滤内容可以参照下http://framework.zend.com/manual/zh/zend.filter.input.html