//访问的模块在允许范围内时,使用当前模块的controllers空间作为默认空间 //省去每个模块在Module.php都要写setDefaultNamespace $arrApp = $application->getModules(); if (in_array($moduleName, array_keys($arrApp))) { $appName = ucfirst($moduleName); if (isset($arrApp[$moduleName]['trueName'])) { //todo 使用了类似map的想法,即不关心原模块名称 $appName = ucfirst($arrApp[$moduleName]['trueName']); } $dispatcher->setDefaultNamespace('ST\\Apps\\' . $appName . '\\Controllers'); } $eventsManager = new \Phalcon\Events\Manager(); //附上侦听者,在分发之前处理get参数,使之可以支持 /module/controller/action/key1/value1/key2/value2 $eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) { $keyParams = []; $params = $dispatcher->getParams(); // array(0=>id, 1=>68) //用奇数参数作key,用偶数作值 foreach ($params as $number => $value) { if ($number & 1) { $keyParams[$params[$number - 1]] = $value; } } // 重写参数 $dispatcher->setParams($keyParams); // array(id => 68) //var_dump($dispatcher->getParams());exit; }); //侦听异常之前,对404,500等错误进行处理及跳转、日志记录等 $eventsManager->attach('dispatch:beforeException', function ($event, $dispatcher, $exception) use($di) { if ($exception instanceof \Phalcon\Mvc\Dispatcher\Exception) {