博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FleaPHP 的 Ajax 支持和 WebControls
阅读量:4192 次
发布时间:2019-05-26

本文共 4937 字,大约阅读时间需要 16 分钟。

原文地址:
FleaPHP 现在具有了基本的 Ajax 支持,示例代码如下:
首先在控制器显示模版的动作方法中有如下代码:
    
/*
*
     * 显示登录界面
     
*/
    
function
 actionIndex()
    {
        
$this
->
_registerFormEvent(
'
form_login
'
,
 
'
submit
'
,
 
'
OnFormLoginSubmit
'
,
                
array
(
                    
'
beforeRequest
'
 
=>
 
"
$('loginFailed').setHTML('');
"
,
                    
'
evalScripts
'
 
=>
 
true
,
                    
'
update
'
 
=>
 
'
loginFailed
'
                )
        );
        
$ajax
 
=&
 
$this
->
_getAjax();
        init_webcontrols();
        
        
include
(TPL_DIR 
.
 
'
/Login.php
'
);
    }
_registerFormEvent() 是 FLEA_Controller_Action 的一个方法,用来注册一个表单的事件。
如果是注册控件(例如文本框)的事件,则用 _registerEvent() 方法。
两个方法的参数是一样的,第一个参数都是控件或者表单的ID,第二个参数是要注册的 DOM 事件(例如 click、change、submit)。第三个参数是当前控制器中用于响应该事件的动作名。第四个参数则是一些 Ajax 事件的属性。
上面代码里面为一个名为 form_login 的表单注册了一个 submit 事件,响应该事件的动作名是 OnFormLoginSubmit。
init_webcontrols(); 是用于初始化 WebControls,因为 Login.php 模版会用到 WebControls。
所以这个控制器还有一个方法如下:
    
function
 actionOnFormLoginSubmit()
    {
        
$username
 
=
 
isset
(
$_POST
[
'
username
'
]) 
?
 
$_POST
[
'
username
'
:
 
''
;
        
$password
 
=
 
isset
(
$_POST
[
'
password
'
]) 
?
 
$_POST
[
'
password
'
:
 
''
;
        
if
 (
$username
 
==
 
'
dualface
'
 
&&
 
$password
 
==
 
'
123456
'
) {
            ajax_redirect(url(
'
Welcome
'
));
        } 
else
 {
            
echo
 
'
您输入的用户名或密码不正确
'
;
        }
    }
这个方法里面,判断用户登录是否成功。成功就用 ajax_redirect() 重定向浏览器,失败则显示出错信息。要注意的是,ajax_redirect() 要求事件 Ajax 属性中的 evalScripts 必须为 true。这样才能成功的重定向浏览器。
整个控制器的代码:
class
 Controller_Default 
extends
 FLEA_Controller_Action
{
    
/*
*
     * 显示登录界面
     
*/
    
function
 actionIndex()
    {
        
$this
->
_registerFormEvent(
'
form_login
'
,
 
'
submit
'
,
 
'
OnFormLoginSubmit
'
,
                
array
(
                    
'
beforeRequest
'
 
=>
 
"
$('loginFailed').setHTML('');
"
,
                    
'
evalScripts
'
 
=>
 
true
,
                    
'
update
'
 
=>
 
'
loginFailed
'
                )
        );
        
$ajax
 
=&
 
$this
->
_getAjax();
        init_webcontrols();
        
        
include
(TPL_DIR 
.
 
'
/Login.php
'
);
    }
   
    
function
 actionOnFormLoginSubmit()
    {
        
$username
 
=
 
isset
(
$_POST
[
'
username
'
]) 
?
 
$_POST
[
'
username
'
:
 
''
;
        
$password
 
=
 
isset
(
$_POST
[
'
password
'
]) 
?
 
$_POST
[
'
password
'
:
 
''
;
        
if
 (
$username
 
==
 
'
dualface
'
 
&&
 
$password
 
==
 
'
123456
'
) {
            ajax_redirect(url(
'
Welcome
'
));
        } 
else
 {
            
echo
 
'
您输入的用户名或密码不正确
'
;
        }
    }
}
非常简单,不需要修改任何应用程序设置,也不需要从特别的对象继承。而且只有在显示模版的动作方法中才需要注册事件(会载入 Ajax 的支持文件),其他动作方法不需要载入任何与 Ajax 相关的文件,提高了性能。
客户端需要的 JavaScript 会自动生成
<
script 
language
="JavaScript"
 type
="text/javascript"
>
if (!Object. extend) {
    alert(
'ERROR: mootools JavaScript framework failed.');
}
function ajax_form_login_onsubmit()
{
    $(
'loginFailed').setHTML('');
    
var myajax = new Ajax(
        
'/__personal/magazine/www/index.php?controller=Default&action=OnFormLoginSubmit',
        
{
            postBody: 
this.toQueryString(),
            evalScripts: 
true,
            update: 
"loginFailed"
        }
    );
    myajax.request();
    
return false;
}
Window.onDomReady(
function() {
    $(
'form_login').addEvent('submit', ajax_form_login_onsubmit)
    $(
'form_login').onsubmit = function() return false; };
}
);
script>
前面是服务端的代码,现在来看看客户端的代码。
客户端主要是模版,其中必须载入 mootools.js 文件:
<
script 
language
="JavaScript"
 type
="text/javascript"
 src
="scripts/mootools.js"
> script>
php $ajax->dumpJs(); ?>
mootools.js 文件在 FLEA/Ajax 目录中,需要复制到应用程序的 scripts 目录中。
前面我们为名为 form_login 的表单注册了事件,所以我们的页面里面必须有一个名为 form_login 的表单,不然是不会正确执行的。
<
form 
name
="form_login"
 id
="form_login"
>
................
form>
表单中增加一个提交按钮,点击后,我们在服务端注册的事件就会执行。
就这么简单?YES
除了注册事件、载入 JS 外,其他工作都由 FleaPHP 完成。
===============================================
FleaPHP 以前版本中有一个 FLEA/Helper/Html.php 文件,其中有许多生成页面控件(文本框、列表框)的方法。
不过这些方法虽然很容易使用,但是不够灵活,所以现在 FleaPHP 中提供了全新的 WebControls 组件。这个组件自带一组控件,还可以随意扩展。要使用这个组件,预先调用一下 init_webcontrols() 全局函数就可以了。
然后就可以用下面的代码创建各种控件:
php webcontrol('textbox', 'username',
    
array(
        
'class' => 'textbox',
        
'size' => 28,
        
'maxlength' => 22,
    )
); 
?>
这段代码生成下面的 XHTML 代码(不支持 HTML):
<
input 
type
="text"
 name
="username"
 id
="username"
 value
=""
 class
="textbox"
 size
="28"
 maxlength
="22"
 
/>
与以前的 html_textbox() 相比,新的 webcontrols() 函数更灵活,可以为控件指定任意数量的属性。
看一个稍微复杂点的例子:
php webcontrol('radiogroup', 'myoption',
    
array(
        
'items' => array(
            
'选项 1' => 1,
            
'选项 2' => 2,
            
'选项 3' => 3,
            
'选项 4' => 4
        )
,
        
'selected' => 2,
        
'class' => 'blue_options',
    )
); 
?>
生成的 XHTML 代码如下:
<
input 
type
="radio"
 name
="myoption"
 id
="myoption_0"
 value
="1"
 class
="blue_options"
 
/><
label 
for
="myoption_0"
 
>
选项 1
label><br />
<input type="radio" name="myoption" id="myoption_1" value="2" class="blue_options" /><label for="myoption_1" >选项 2 label><br />
<input type="radio" name="myoption" id="myoption_2" value="3" checked="checked" class="blue_options" /><label for="myoption_2" >选项 3 label><br />
<input type="radio" name="myoption" id="myoption_3" value="4" class="blue_options" /><label for="myoption_3" >选项 4 label>
实际效果:
假如是从数据库取出的数据,那么用 array_hashmap() 转换一下记录集,就可以做为 items 属性来显示一个单选按钮组。
另一个例子,显示一个多选框:
php webcontrol('checkbox', 'keep_password',
    
array(
        
'caption' => '记住我的密码',
    )
); 
?>
生成的 XHTML 代码如下:
<
input 
type
="checkbox"
 name
="keep_username"
 id
="keep_username"
 value
="1"
 
/><
label 
for
="keep_username"
 
>
在此计算机上保留我的登录信息
label>
实际效果:
==================================
Ajax 支持和 WebControls 将在 FleaPHP 1.0.70 版本中发布。
目前的开发进度请参考:

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1432956

你可能感兴趣的文章
RISC架构服务器开源运动将促使市场需求提升
查看>>
IT治理的成功要诀
查看>>
中化CIO彭劲松:IT治理让我明明白白做事
查看>>
中国惠普公司企业计算及专业服务集团卫东:IT治理最重要就是保证技术与业务有效结合
查看>>
《给初学者的Windows Vista的补遗手册》之064
查看>>
《给初学者的Windows Vista的补遗手册》之063
查看>>
《给初学者的Windows Vista的补遗手册》之062
查看>>
《给初学者的Windows Vista的补遗手册》之057
查看>>
《给初学者的Windows Vista的补遗手册》之056
查看>>
《给初学者的Windows Vista的补遗手册》之045
查看>>
域名1元价,我也来注册一个
查看>>
《给初学者的Windows Vista的补遗手册》之037
查看>>
《给初学者的Windows Vista的补遗手册》之036
查看>>
《给初学者的Windows Vista的补遗手册》之035
查看>>
Spring开发指南 0.8 发布
查看>>
微软宣布将推出XNA Game Studio
查看>>
MySQL宣布加入微软Visual Studio工业伙伴计划
查看>>
菜鸟、夫子、玫林凯与测试
查看>>
无锁编程与分布式编程那个更适合多核CPU?
查看>>
多核系统中三种典型锁竞争的加速比分析
查看>>