Ejemplo n.º 1
0
 //访问的模块在允许范围内时,使用当前模块的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) {