本文整理汇总了PHP中Pi::piCallMethod方法的典型用法代码示例。如果您正苦于以下问题:PHP Pi::piCallMethod方法的具体用法?PHP Pi::piCallMethod怎么用?PHP Pi::piCallMethod使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pi
的用法示例。
在下文中一共展示了Pi::piCallMethod方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: dispatch
public function dispatch()
{
if (!$this->checkSign()) {
$this->output('api.err sign', 7099);
}
$mod_name = Pcf::get("global.mod", 'mod');
$func_name = Pcf::get("global.func", 'func');
$mod_seg = Pcf::get("global.mod_seg", '/');
$api_path = Pcf::get("global.base_path", PI_APP_ROOT . PI_APP_NAME . DOT . 'logic' . DOT);
$mod = Comm::Req($mod_name);
$func = Comm::Req($func_name);
$mod = explode($mod_seg, $mod);
$pattern = '/^[0-9a-zA-Z\\/]*$/';
$class = '';
if (!empty($mod)) {
foreach ($mod as $k => $m) {
if (empty($m) || !is_string($m)) {
if (!preg_match($pattern, $m)) {
$this->output('api.err error format mod:' . $m, 1005);
}
unset($mod[$k]);
}
$mod[$k] = strtolower($m);
$class .= ucfirst($mod[$k]);
}
}
if (empty($mod)) {
$this->output('api.err empty api mod:' . $mod, 1006);
}
if (empty($func) || !is_string($func) || !preg_match($pattern, $func)) {
$this->output('api.err empty or error api func:' . $func, 1007);
}
Pi::inc(PI_CORE . 'BaseApi.php');
$file = $api_path . implode(DOT, $mod) . DOT . $class . '.api.php';
if (!Pi::inc($file)) {
$this->output('api.err api router can not load file:' . $file, 1008);
}
if (!class_exists($class)) {
$this->output('api.err api router not find class:' . $class, 1009);
}
$cls = new $class();
if (!is_subclass_of($cls, 'PiBaseApi')) {
$this->output('api.err is not the subclass of BaseApi', 1010);
}
if (!is_callable(array($cls, $func))) {
$this->output('api.err api class:' . $class . ' can not call method:' . $func, 1011);
}
$res = Pi::piCallMethod($cls, $func);
return $res;
}
示例2: dispatch
public function dispatch($url = null, $domain = '')
{
//正常逻辑保证按照目录逻辑加载,需要美化url用path_info传递参数的需要自定义路由配置(保持高效)
//ajax自动去掉第一层,然后按照路径加载,二级域名去掉第一层,给域名定义alias配置,否则按照二级域名寻找
if ($url != null) {
$this->customRouter($url, $domain);
}
$uri = empty($this->uri) ? array() : explode('/', $this->uri);
//如果没有任何path info,走默认配置,没有配置改成index
if (empty($uri)) {
$this->mod = array(Pcf::get('global.main_page', 'index'));
$this->func = Pcf::get('global.main_func', 'index');
} else {
if (count($uri) == 1 && !empty($uri[0])) {
$this->mod = array($uri[0]);
$this->func = Pcf::get('global.main_func', 'index');
} else {
$this->func = array_pop($uri);
$this->mod = $uri;
}
}
//保护不让访问的页面
if (isset($this->prtected[$this->func])) {
throw new Exception('router.err can not reach the protected ctr', 1021);
}
$mod_path = '';
$cls = '';
foreach ($this->mod as $mod) {
$mod_path = $mod_path . $mod . DOT;
$cls = $cls . ucfirst($mod);
}
$cls = $this->class_pre . $cls . "Ctr";
$file_path = $this->base_path . $mod_path . $cls . '.php';
if (!Pi::inc($file_path)) {
throw new Exception('router.err not found the router file : ' . $file_path, 1022);
}
if (!class_exists($cls)) {
throw new Exception('router.err not found the router class: ' . $cls, 1023);
}
//执行
$class = new $cls();
if (!is_subclass_of($class, 'PiPageCtr')) {
throw new Exception('router.err class : ' . $cls . 'is not the subclass of PiPageCtr', 1023);
}
try {
Pi::piCallMethod($class, '_p_before');
Pi::piCallMethod($class, 'initTmpl');
Pi::piCallMethod($class, 'setRouter', array($this));
if ($this->class_pre === 'Ajax') {
Pi::piCallMethod($class, 'setAjax', array(true));
}
Pi::piCallMethod($class, '_before');
if (substr($this->func, 0, 1) == '_' || !is_callable(array($class, $this->func))) {
throw new Exception('router.err not ' . $cls . ' can not call : ' . $this->func, 1025);
}
Pi::piCallMethod($class, $this->func);
Pi::piCallMethod($class, '_after');
Pi::piCallMethod($class, '_p_after');
} catch (Exception $ex) {
Pi::piCallMethod($class, '_after');
Pi::piCallMethod($class, '_p_after');
throw $ex;
}
}