当前位置:  编程技术>php
本页文章导读:
    ▪深入理解 ZF 分配循环(Dispatcher工作原理)      分配是一个从 Zend_Controller_Request_Abstract 中提取module名,controller名,action名,和其中包含的可选的参数,然后实例化一个控制器并调用控制器中的action的一个过程.如果module,controller,action中的.........
    ▪zf判断请求是否来自XMLHttpRequest对象的方法      介绍: 判断请求是否来自 XMLHttpRequest 对象的的方法: 如果请求来自XMLHttpRequest,服务器端将存在$_SERVER['HTTP_X_REQUESTED_WITH']变量,由此可以判断。 下面的代码摘自Zend_Controller_Request_Http:   .........
    ▪使用Zend_Captcha生成验证码的方法      测试了下zf中的Zend_Captcha,手册中的示例有点问题,以下是测试成功的代码。   代码如下: <?php class TestController extends Lyw0301_Controller_Action {  public function init() {   parent::init();   $this->v.........

[1]深入理解 ZF 分配循环(Dispatcher工作原理)
    来源: 互联网  发布时间: 2013-12-24

分配是一个从 Zend_Controller_Request_Abstract 中提取module名,controller名,action名,和其中包含的可选的参数,然后实例化一个控制器并调用控制器中的action的一个过程.如果module,controller,action中的任何一个没有找到,将使用它们的默认值。

Zend_Controller_Dispatcher_Standard 指定了`index` 作为controller, action 的默认值, 用 `default` 作为module的默认值.尽管如此,还是允许开发者通过setDefaultController(), setDefaultAction(), and setDefaultModule() 等分配器方法来相应的改变默认值.

分配发生在前端控制器的一个循环中.在分配发生之前, 前端控制器通过 路由来找到 用户指定的module, controller, action 的值和可选的参数.然后就进入一个分配请求的循环.

在每一个遍历开始时, 它(Dispatcher)在请求对象中设置一个当前 action 已经分配的标志.如果一个 action 或者 pre/postDispatch 插件重置了这个标志, 分配循环将继续,并试图 分配一个新的请求.通过改变请求中的controller 和/或者 action 和重置分配标志, 开发者可能定义一个可以执行的请求链.

是行为控制器中的 _forward 方法控制了这样的分配; 通过在 任何 pre/postDispatch(), 或者action 方法中提供 一个 action, controller, module 和可选的附加参数, 你就可以 请求一个新的action。

示例代码:
 

代码如下:

<?php
public function fooAction()
{
    // forward to another action in the current controller and module:
    $this->_forward('bar', null, null, array('baz' => 'bogus'));
}

public function barAction()
{
    // forward to an action in another controller, FooController::bazAction(),
    // in the current module:
    $this->_forward('baz', 'foo', null, array('baz' => 'bogus'));
}

public function bazAction()
{
    // forward to an action in another controller in another module,
    // Foo_BarController::bazAction():
    $this->_forward('baz', 'bar', 'foo', array('baz' => 'bogus'));
}
?>

总结:Dispatcher 是 ZF 实现 MVC的重要组成部分,理解Dipatcher的功能对我们更好的应用 ZF或其它框架有很重要的意义。
可以认为分配的作用就类似于,在路由之后执行相应行为的一个过程,然后 返回response 对象。


    
[2]zf判断请求是否来自XMLHttpRequest对象的方法
    来源: 互联网  发布时间: 2013-12-24

介绍:
判断请求是否来自 XMLHttpRequest 对象的的方法: 如果请求来自XMLHttpRequest,服务器端将存在$_SERVER['HTTP_X_REQUESTED_WITH']变量,由此可以判断。
下面的代码摘自Zend_Controller_Request_Http:
 

代码如下:
/*
* * Is the request a Javascript XMLHttpRequest?
* * Should work with Prototype/Script.aculo.us, possibly others.
* * @return boolean
*/
public function isXmlHttpRequest() {
    return (
    $this->getHeader('X_REQUESTED_WITH') == 'XMLHttpRequest');
}

    
[3]使用Zend_Captcha生成验证码的方法
    来源: 互联网  发布时间: 2013-12-24

测试了下zf中的Zend_Captcha,手册中的示例有点问题,以下是测试成功的代码。
 

代码如下:

<?php
class TestController extends Lyw0301_Controller_Action {
 public function init() {
  parent::init();
  $this->view->title = '测试';
  $this->view->baseUrl = $this->getFrontController()->getBaseUrl();
  // $this->_helper->viewRenderer->setNoRender();
  //Zend_Layout::getMvcInstance()->disableLayout();
 }
 function generateCaptcha() {
  $captcha = new Zend_Captcha_Image();
  $captcha->setTimeout('300')
  ->setWordLen('6')
  ->setHeight('80')
  ->setFont('./images/font/micross.ttf')
  ->setImgDir('./images/code');
 
  $captcha->generate();  
  return $captcha->getId();
 } 

 //validates captcha response
 function validateCaptcha($captcha) {
  $captchaId = $captcha['id'];
  $captchaInput = $captcha['input'];
  $captchaSession = new Zend_Session_Namespace('Zend_Form_Captcha_' . $captchaId);
  $captchaIterator = $captchaSession->getIterator();
  Zend_Debug::dump($captchaIterator);exit;
  $captchaWord = $captchaIterator['word'];
  if($captchaWord) {
   if( $captchaInput != $captchaWord ){
    return false;
   } else {
    return true;
   }
  } else {
   return false;
  }
 }
 public function indexAction() {
  $captchaId = $this->generateCaptcha();      
  $this->view->captchaId = $captchaId;
  if(isset()($_POST['captcha'])) {     
   $captcha = $_POST['captcha'];   
   if( $this->validateCaptcha($captcha) ) {
    $this->view->message = 'yes';
   } else {
    $this->view->message = 'no';
   }
  }
 }
}
?>


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,