コード例 #1
0
ファイル: Error.php プロジェクト: gueff/mymvc
 /**
  * sets error handlers; 
  * bind event 'mvc.error' to function
  * 
  * @access public
  * @return void
  */
 public function __construct()
 {
     register_shutdown_function("\\MVC\\Error::FATAL");
     set_error_handler("\\MVC\\Error::ERRORHANDLER");
     set_exception_handler("\\MVC\\Error::EXCEPTION");
     Event::BIND('mvc.error', function ($mPackage) {
         \MVC\Error::addERROR($mPackage);
     });
 }
コード例 #2
0
ファイル: Policy.php プロジェクト: gueff/mymvc
 /**
  * gets the policy rules; if one matches to the current request, it will be executed
  *
  * @access public
  * @return void
  */
 public function __construct()
 {
     Event::RUN('mvc.policy.before');
     Event::BIND('mvc.error', function ($mPackage) {
         \MVC\Error::addERROR($mPackage);
     });
     $aPolicy = $this->getPolicyRuleOnCurrentRequest();
     if (!empty($aPolicy)) {
         foreach ($aPolicy as $sPolicy) {
             if ('' !== $sPolicy) {
                 // execute policy
                 if (call_user_func($sPolicy) === FALSE) {
                     \MVC\Event::RUN('mvc.error', "Policy could not be executed: " . $sPolicy);
                 }
             }
         }
     }
     Event::RUN('mvc.policy.after');
 }
コード例 #3
0
ファイル: Index.php プロジェクト: gueff/mymvc
 /**
  * collects all Info for being displayed by the Toolbar
  * 
  * @access private
  * @param \Smarty $oView
  * @return array $aToolbar containing all Info for toolbar
  */
 private function collectInfo(\Smarty $oView)
 {
     $aToolbar = array();
     $aToolbar['sPHP'] = phpversion();
     $aToolbar['sOS'] = PHP_OS;
     $aToolbar['sEnv'] = \MVC\Registry::get('MVC_ENV');
     $aToolbar['aGet'] = array_map('htmlentities', $_GET);
     $aToolbar['aPost'] = array_map('htmlentities', $_POST);
     $aToolbar['aCookie'] = array_map('htmlentities', $_COOKIE);
     $aToolbar['aRequest'] = array_map('htmlentities', $_REQUEST);
     $aToolbar['aSession'] = $_SESSION;
     $aToolbar['aSmartyTemplateVars'] = $oView->getTemplateVars();
     $aConstants = get_defined_constants(true);
     $aToolbar['aConstant'] = $aConstants['user'];
     $aToolbar['aServer'] = $_SERVER;
     $aToolbar['oMvcRequestGetWhitelistParams'] = \MVC\Request::getInstance()->getWhitelistParams();
     $aToolbar['oMvcRequestGetQueryArray'] = \MVC\Request::getInstance()->getQueryArray();
     $aToolbar['aEvent'] = \MVC\Registry::isRegistered('MVC_EVENT') ? \MVC\Registry::get('MVC_EVENT') : array();
     $aRequest = \MVC\Request::GETCURRENTREQUEST();
     $aToolbar['aRouting'] = array('aRequest' => \MVC\Request::GETCURRENTREQUEST(), 'sModule' => \MVC\Request::getInstance()->getModule(), 'sController' => \MVC\Request::getInstance()->getController(), 'sMethod' => \MVC\Request::getInstance()->getMethod(), 'sArg' => isset($aToolbar['oMvcRequestGetQueryArray']['GET']['a']) ? $aToolbar['oMvcRequestGetQueryArray']['GET']['a'] : '', 'aRoute' => \MVC\Registry::get('MVC_ROUTING_CURRENT'), 'sRoutingJsonBuilder' => \MVC\Registry::get('MVC_ROUTING_JSON_BUILDER'), 'sRoutingHandling' => \MVC\Registry::get('MVC_ROUTING_HANDLING'));
     $aPolicy = \MVC\Registry::get('MVC_POLICY');
     $sController = '\\' . \MVC\Request::getInstance()->getModule() . '\\Controller\\' . \MVC\Request::getInstance()->getController();
     $sMethod = \MVC\Request::getInstance()->getMethod();
     $aToolbar['aPolicy']['aRule'] = \MVC\Registry::isRegistered('MVC_POLICY') ? \MVC\Registry::get('MVC_POLICY') : array();
     $aToolbar['aPolicy']['aApplied'] = isset($aPolicy[$sController][$sMethod]) ? $aPolicy[$sController][$sMethod] : false;
     $aToolbar['aPolicy']['sAppliedAt'] = isset($aPolicy[$sController][$sMethod]) ? $sController . '::' . $sMethod : false;
     $sTemplate = file_exists($oView->sTemplate) ? $oView->sTemplate : (file_exists($oView->_joined_template_dir . '/' . $oView->sTemplate) ? $oView->_joined_template_dir . '/' . $oView->sTemplate : false);
     $aToolbar['sTemplate'] = $sTemplate;
     $aToolbar['sTemplateContent'] = file_get_contents($aToolbar['sTemplate']);
     ob_start();
     $sTemplate = file_get_contents($oView->sTemplate, true);
     $oView->renderString($sTemplate);
     $sRendered = ob_get_contents();
     ob_end_clean();
     $aToolbar['sRendered'] = $sRendered;
     $aToolbar['aFilesIncluded'] = get_required_files();
     $aToolbar['aMemory'] = array('iRealMemoryUsage' => memory_get_usage(true) / 1024, 'dMemoryUsage' => memory_get_usage() / 1024, 'dMemoryPeakUsage' => memory_get_peak_usage() / 1024);
     $aToolbar['aRegistry'] = \MVC\Registry::getStorageArray();
     $aToolbar['aCache'] = $this->getCaches();
     $aToolbar['aError'] = \MVC\Error::getERROR();
     $aToolbar['oIds'] = \MVC\Registry::isRegistered('MVC_IDS_IMPACT') ? \MVC\Registry::get('MVC_IDS_IMPACT') : '';
     $aToolbar['aIdsConfig'] = \MVC\Registry::isRegistered('MVC_IDS_INIT') ? \MVC\Registry::get('MVC_IDS_INIT') : '';
     $aToolbar['aIdsDisposed'] = \MVC\Registry::isRegistered('MVC_IDS_DISPOSED') ? \MVC\Registry::get('MVC_IDS_DISPOSED') : '';
     $iMicrotime = microtime(true);
     $sMicrotime = sprintf("%06d", ($iMicrotime - floor($iMicrotime)) * 1000000);
     $oDateTime = new \DateTime(date('Y-m-d H:i:s.' . $sMicrotime, $iMicrotime));
     $oStart = \MVC\Session::getInstance()->get('startDateTime');
     $dDiff = date_format($oDateTime, "s.u") - date_format($oStart, "s.u");
     $aToolbar['sConstructionTime'] = round($dDiff, 3);
     return $aToolbar;
 }
コード例 #4
0
ファイル: MVC.php プロジェクト: simple-php-mvc/simple-php-mvc
 /**
  * Run the aplication
  * 
  * @access public
  * @return void
  */
 public function run(HttpRequest $request = null)
 {
     if (!$this->container->getSetting('debug')) {
         error_reporting(0);
     } else {
         error_reporting(E_ALL);
     }
     if (!$request) {
         $request = $this->container->getRequest();
     }
     try {
         $parsed = $this->container->getRouter()->parse($request, $this->container->getRoutes());
         if ($parsed['found'] || $this->container->hasRoute('notFound')) {
             if (is_string($parsed['action'])) {
                 # Extract class controller and method
                 list($controller, $method) = explode('::', $parsed['action']);
                 # initialize arguments
                 $arguments = array();
                 # Create a reflection method
                 $reflectionMethod = new \ReflectionMethod($controller, $method);
                 $reflectionParams = $reflectionMethod->getParameters();
                 # Create arguments
                 foreach ($reflectionParams as $param) {
                     if ($paramClass = $param->getClass()) {
                         $className = $paramClass->name;
                         if ($className === 'MVC\\MVC' || $className === '\\MVC\\MVC') {
                             $arguments[] = $this;
                         } elseif ($className === 'MVC\\Server\\HttpRequest' || $className === '\\MVC\\Server\\HttpRequest') {
                             $arguments[] = $request;
                         }
                     } else {
                         foreach ($parsed['params'] as $keyRouteParam => $valueRouteParam) {
                             if ($param->name === $keyRouteParam) {
                                 $arguments[] = $valueRouteParam;
                                 break;
                             }
                         }
                     }
                 }
                 $response = call_user_func_array($reflectionMethod->getClosure(new $controller()), $arguments);
                 if (is_array($response) && !isset($response['body'])) {
                     throw new \LogicException("Invalid response array. Array response haven't body. Expected array('body' => 'string')");
                 } elseif (is_string($response)) {
                     $response = array('body' => $response);
                 }
             } elseif (is_callable($parsed['action'])) {
                 $this->container->getRequest()->params = $parsed['params'];
                 $response = call_user_func_array($parsed['action'], array_values($parsed['params']));
             } else {
                 throw new \LogicException('Route haven\'t action.');
             }
             if ($this->container->hasProvider('monolog')) {
                 $this->container->providers['monolog']->addInfo($response, $parsed);
             }
             $this->container->getResponse()->render($response);
         } else {
             if ($this->container->getSetting('debug')) {
                 throw new \LogicException(sprintf('Route or Resource "%s" not found.', $request->url));
             }
             $this->defaultNotFound();
         }
     } catch (\Exception $e) {
         Error::run($e);
     }
 }