저는 Object Oriented PHP 및 MVC에 조금 익숙하므로 좀 도와주세요.밑줄 (PEAR 스타일) 표기법을 사용하는 하위 폴더에서 자동로드 PHP 클래스
파일 시스템에 하위 폴더가있는 MVC 스타일 폴더 구조가 있습니다.
- 예 :. view/classes/subfolder/classname.php
인간 친숙적 URL에 mod_rewrite를 사용하고 있습니다 (/classname
또는 /foldername/calssname
). 페이지 로더에 밑줄로 구분 된 값으로 전달됩니다.
- 예 : [/ 다른/다른 경우 경우 각 가능한 폴더에 테스트 차단 그러나 이것은 비효율적 인 것 같다, 그래서 foldername_classname
// Page Loader File require_once($_SERVER['DOCUMENT_ROOT'].'/local/classLoader.php'); session_start(); $page = new $_REQUEST['page'];
것은 내가 이전에 사용하고는 I 많은에서 오토로더 모양을 가지고 더 나은 방법을 찾고 있어요 다른 위치.
여기에 요청 된 클래스 중 하나를 찾기 위해 관리하지 않습니다 내 최신 실패, 그리고 단지 각각 나는 또한이었다 치명적인 오류! :
function classToPath($class) { $path = str_replace('_', '/', $class) . '.php'; return $path; } function autoloadController($class) { echo 'LoadController'.'
'; $root = '/controller/classes/'; $pathtoclass = $root.classToPath($class); try { if(file_exists($pathtoclass)) require_once($pathtoclass); else throw new Exception('Cannot load controller '.$class); } catch(Exception $e) { echo 'Controller exception: ' . $e->getMessage() . "
"; } } function autoloadModel($class) { echo 'LoadModel'.'
'; $root = '/model/classes/'; $pathtoclass = $root.classToPath($class); try { if(file_exists($pathtoclass)) require_once($pathtoclass); else throw new Exception('Cannot load model '.$class); } catch(Exception $e) { echo 'Model exception: ' . $e->getMessage() . "
"; } } function autoloadView($class) { echo 'LoadView'.'
'; $root = '/view/classes/'; $pathtoclass = $root.classToPath($class); try { if(file_exists($pathtoclass)) require_once($pathtoclass); else throw new Exception('Cannot load view '.$class); } catch(Exception $e) { echo 'View exception: ' . $e->getMessage() . "
"; } } spl_autoload_register('autoloadController'); spl_autoload_register('autoloadModel'); spl_autoload_register('autoloadView');
와 결말에 대한 예외를 출력 폴더/클래스 매핑에 대한 URL이 정확히 어떻게 동작해야하는지 궁금합니다.
- 예 : URL :
/foldername/classname
mod_rewritten ~
foldername_classname
;
폴더 아래의 클래스 파일 이름이
classname.php
인 ;
및 PHP 클래스 정의
class foldername_classname extends another_class { etc.
올바른 방법입니까?