コード例 #1
0
ファイル: ClassLoader.php プロジェクト: pathum/mvctest
 public function getItemPath($class)
 {
     $manifest = ClassManifest::get_class_manifest();
     if (isset($manifest[$class])) {
         return $manifest[$class]['path'];
     }
 }
コード例 #2
0
ファイル: Router.php プロジェクト: pathum/mvctest
 /**
  *
  */
 public static function route()
 {
     $url = $_GET['url'];
     $base = ConfigManifest::get_config('BasePath');
     if ($base && $base != '/' && strpos($url, $base) === 0) {
         $url = substr($url, strlen($base));
     }
     if (empty($url)) {
         $url = '/';
     }
     $parts = explode('/', $url);
     array_shift($parts);
     $response = new View();
     $action = "index";
     if (count($parts) == 1 && $parts[0] == "") {
         $parts[0] = 'home';
     }
     if (count($parts) > 1 && $parts[1] != "") {
         $action = trim($parts[1]);
     }
     $processed = false;
     if ($parts[0] && ClassManifest::has_class($parts[0]) && ClassManifest::is_a($parts[0], 'Controller')) {
         $page = new Page();
         $page->ID = -1;
         $page->URLSegment = $parts[0];
         $page->Title = 'Default Controller';
         $controller = new $parts[0]();
         if (method_exists($controller, 'getDefaultRecord')) {
             $page = $controller->getDefaultRecord();
         }
         $controller->setRecord($page);
         $response->setController($controller);
         if (method_exists($controller, $action)) {
             $response->setContents($controller->{$action}());
             $processed = true;
         }
     } else {
         if ($page = Page::find_one("URLSegment = '" . DB::raw2sql($parts[0]) . "'")) {
             $controller = $page->getController();
             $response->setController($controller);
             if (method_exists($controller, $action)) {
                 $response->setContents($controller->{$action}());
                 $processed = true;
             }
         }
     }
     if (!$processed) {
         $controller = new NotFoundController();
         $page = $controller->getDefaultRecord();
         $controller->setRecord($page);
         $response->setController($controller);
         $response->setContents($controller->index());
     }
     if (!headers_sent()) {
         http_response_code($controller->getHTTPCode());
     }
     echo $response->render();
 }
コード例 #3
0
ファイル: Page.php プロジェクト: pathum/mvctest
 public function getController()
 {
     $controllerClass = $this->ClassName . 'Controller';
     if (ClassManifest::has_class($controllerClass)) {
         $controller = new $controllerClass();
     } else {
         $controller = new PageController();
     }
     $controller->setRecord($this);
     return $controller;
 }
コード例 #4
0
ファイル: Build.php プロジェクト: pathum/mvctest
 /**
  * @return string|void
  */
 public function index()
 {
     $classes = ClassManifest::subclasses_for('Record');
     $str = '<p>Data base building</p>';
     $str .= '<ul>';
     foreach ($classes as $class) {
         if ($class != 'Record') {
             $str .= Record::make_table($class);
         }
     }
     $str .= '</ul>';
     return $str;
 }
コード例 #5
0
ファイル: Record.php プロジェクト: pathum/mvctest
 public function base_class()
 {
     $class = get_called_class();
     $ancestry = array_merge(array($class), ClassManifest::get_ancestry($class));
     $baseClass = $class;
     foreach ($ancestry as $current) {
         if (!Record::unreadable_class($current)) {
             $baseClass = $current;
         }
     }
     return $baseClass;
 }
コード例 #6
0
ファイル: ClassManifest.php プロジェクト: pathum/mvctest
 /**
  * @return mixed|null
  */
 public static function get_class_manifest()
 {
     if (!self::$class_manifest) {
         self::$class_manifest = unserialize(file_get_contents(TEMP_PATH . '/class_manifest'));
     }
     return self::$class_manifest;
 }
コード例 #7
0
ファイル: Manifest.php プロジェクト: pathum/mvctest
 public static function reload_manifest()
 {
     self::build_file_manifest(BASE_PATH);
     ClassManifest::make_manifest();
     ConfigManifest::make_manifest();
 }