您的位置:首页 > 编程语言 > PHP开发

用Php扩展实现的简单框架 - 6 - 使用示例

2008-03-24 15:05 1541 查看
可借鉴Zend的使用:

编译到Php,比如编译为共享模块放入Php的扩展目录;

修改Php的配置文件,加入相关条目,只需要指定配置文件的路径:
extension=php_kiss.so

[kiss]
kiss.cfg_file = "/web/kiss_test/conf/kiss.cfg_file.cfg"

配置文件
kiss.cfg_file.cfg样例如下:


RW:test.dev/group group_controller

LS:test.dev /web/kiss_test/listeners/

RW表示控制器文件的目录,格式:RW:HOST/[MODULE]   PATH,
LS表示监听器文件的目录,
格式:LS:HOST   PATH,
可以使用相对或绝对路径;
注意:因为只作非常简单的解析,所以不要加入多余字符;

修改Apache的配置文件或者在项目目录中增加.htaccess文件并激活url-rewrite,例如:

RewriteEngine    on
RewriteRule    !/.(js|ico|gif|jpg|png|css|php|html)$    /index.php

将动态url都导向index.php(作为前端控制器);

index.php例如:

<?php

ini_set('display_errors', true);
$br = (php_sapi_name() == "cli")? "/n":"<br>/n";
$space = (php_sapi_name() == "cli")? " ":" ";

kiss_status(KISS_STATUS_EXT_PATH, ".kiss");
// kiss_status(KISS_STATUS_USE_PORT, 1);

// kiss_status(KISS_STATUS_PREFIX_CTL, 0);

// kiss_status(KISS_STATUS_SHARE_GP, 0);

try {
kiss_front_start();
} catch(Exception $e) {
// var_dump($e->getTrace());

echo "MSG: ", $e->getMessage(), "$br";
echo "CODE: ", $e->getCode(), "$br";
}

?>

如果访问http://test.dev/group/Test3,则会执行
group_controller目录下的Test3Controller.php;
如要再terminal中测试,可以增加kiss_status(KISS_STATUS_CLI_ROOT, $YOUR_ROOT);
并用kiss_cli_test($URL);代替kiss_front_start();来执行;
Test3Controller.php:

<?php

class GroupTest3Controller extends KissAction {

public function __construct() {
parent::__construct();
echo __METHOD__, "/n";
kiss_set_listener("user", "");
kiss_set_listener("admin", "admin");
kiss_set_listener("admin", "admin", KISS_LS_POST_DISPATCH);
kiss_set_listener("user", NULL, KISS_LS_POST_DISPATCH);
}

public function indexAction() {
global $br;
echo "I'm from ", __METHOD__, "$br";
kiss_forward("admin");
}

public function adminAction() {
global $br;
echo "I'm from ", __METHOD__, "$br";
}
}

?>

有个不认识的
kiss_set_listener()函数,它是为控制器增加监听器的,四个调用的效果分别是:
为该控制器的所有Action增加user“分发前”监听器,
为admin这个Action增加admin
“分发前”监听器,
为admin这个Action增加admin
“分发后”监听器,
为该控制器的所有Action增加user“分发
”监听器
;

要察看效果,在
listeners目录中增加:
user.php:

<?php

class User extends KissListener {
public function __construct() {
parent::__construct();
echo __METHOD__, "/n";
}

public function preDispatch() {
$req = kiss_request_get(KISS_REQ_ACTION);
$req = $req['action'];
echo __METHOD__, " from [$req] <br/>/n";
}

public function postDispatch() {
$req = kiss_request_get(KISS_REQ_ACTION);
$req = $req['action'];
echo __METHOD__, " from [$req] <br/>/n";
}

}

?>


admin.php:

<?php

class Admin extends KissListener {
public function __construct() {
parent::__construct();
echo __METHOD__, "/n";
}

public function preDispatch() {
$req = kiss_request_get(KISS_REQ_ACTION);
$req = $req['action'];
echo __METHOD__, " from [$req] <br/>/n";
}

public function postDispatch() {
$req = kiss_request_get(KISS_REQ_ACTION);
$req = $req['action'];
echo __METHOD__, " from [$req] <br/>/n";
}

}

?>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: