- 论坛徽章:
- 0
|
详细的使用介绍 - 样例
详细使用示例
可借鉴Zend的使用:
*nix和Windows平台的编译方法可参考我的blog的其他文章;
修改Php的配置文件,加入相关条目,只需要指定配置文件的路径:extension=php_kiss.so
[kiss]
kiss.cfg_file = "/web/kiss_test/conf/kiss.cfg_file.cfg"
|
假如我们的项目kiss_test的域名是"test.dev",缺省80端口,
目录结构:
/web/kiss_test/htdocs/ - 基目录是,以下用$root表示,
├ kiss_front.php
└ .htaccess
/web/kiss_test/controllers/ - 缺省模块的目录,
├ IndexController.php
└ BlogController.php
/web/kiss_test/admin_controllers/ - "admin"模块,
└ UserAdminController.php
/web/kiss_test/listeners/ - 监听器目录,
├ User.php
└ Admin.php
配置文件kiss.cfg_file.cfg样例如下:
RW:test.dev /web/kiss_test/controllers
RW:test.dev/admin admin_controllers/
LS:test.dev /web/kiss_test/listeners/
| RW表示控制器文件的目录,格式:RW:HOST[:PORT][/MODULE] PATH,
LS表示监听器文件的目录,格式:LS:HOST PATH,
注意:
PATH可以使用相对或绝对路径;
是否使用PORT,需要kiss_status()做对应的设定;
如果缺省模块为"",HOST后面的‘/’可以省略;
因为只作非常简单的解析,所以不要加入多余字符;
如果使用Apache,修改其配置文件激活url-rewrite,,
或者在项目目录中增加.htaccess文件,
例如:
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|php|html)$ /kiss_front.php
#RewriteRule \.kiss$ /kiss_front.php
| 将动态或特定的url都导向kiss_front.php(作为前端控制器);
kiss_front.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/,则会执行controllers目录下的IndexController.php中的indexAction方法;
http://test.dev/index、http://test.dev/index/index和http://test.dev/index/index/k1/v1/k2/v2?k3=v3也是,
http://test.dev/blog/... 定向到controllers目录下的BlogController.php,
http://test.dev/admin/userAdmin/... 定向到admin_controllers目录下的UserAdminController.php;
注意:类名、文件名和URL的关系以及大小写。
如要在CLI中测试,可以增加kiss_status(KISS_STATUS_CLI_ROOT, dirname(dirname(__FILE__)));
并用kiss_cli_test($URL);代替kiss_front_start();来执行;
IndexController.php:
<?php
class IndexController extends KissAction {
public function __construct() {
parent::__construct();
echo __METHOD__, "\n";
}
public function indexAction() {
global $br;
echo "I'm from ", __METHOD__, "$br";
kiss_forward("index", "blog"); // 调用BlogController->indexAction();
}
}
?>
|
BlogController.php
<?php
class BlogController extends KissAction {
public function __construct() {
parent::__construct();
echo __METHOD__, "\n";
kiss_set_listener("user", "myinfo"); // 设定myinfoAction方法的分发前监听器
// kiss_set_listener("user", "myinfo", KISS_LS_POST_DISPATCH);
}
public function indexAction() {
global $br;
echo "I'm from ", __METHOD__, "$br";
kiss_forward("myinfo");
}
public function myinfoAction() {
global $br;
echo "I'm from ", __METHOD__, "$br";
}
}
?>
|
UserAdminController.php
<?php
class AdminUserAdminController extends KissAction {
public function __construct() {
parent::__construct();
echo __METHOD__, "\n";
kiss_set_listener("admin"); // 设定所有方法的分发前监听器
kiss_set_listener("admin", NULL, KISS_LS_POST_DISPATCH);
}
public function indexAction() {
global $br;
echo "I'm from ", __METHOD__, "$br";
kiss_forward("userlist");
}
public function userlistAction() {
global $br;
echo "I'm from ", __METHOD__, "$br";
}
}
?>
|
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";
}
}
?>
|
这样,简单的测试就完成了.
[ 本帖最后由 hshq_cn 于 2008-1-24 15:51 编辑 ] |
|