可借鉴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"; } }
?>
|