>백엔드 개발 >PHP 튜토리얼 >PHP 프로젝트의 Store MVC 프레임워크 요약(1)

PHP 프로젝트의 Store MVC 프레임워크 요약(1)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-08-08 09:28:081100검색

1. 코드 구조 구분:

<span>目前的目录结构:
</span>/<span>站点根目录
</span>/application/<span>应用程序目录
    Model</span>/<span>模型目录
    View</span>/<span>视图目录
        Back</span>/<span>后台
        front</span>/<span>
        test</span>/<span>测试平台
    Controller</span>/<span>控制器目录
        Back</span>/<span>后台
        front</span>/<span>前台
        test</span>/<span>测试平台
</span>/framework/<span>框架目录
    MySQLDB.</span><span>class</span><span>.php 数据库操作类DAO
    Model.</span><span>class</span><span>.php 基础模型类
</span>/index.php入口文件

2. 홈페이지 요청

2.1 홈페이지 매개변수 요청 예시(request localhost/index.php?p=front&c=shop&a=index)

 P=front  <span>//</span><span>后台还是前台 参数有back和front</span>
 C=index   <span>//</span><span>控制器,此处请求首页控制器</span>
 A=shop   <span>//</span><span>动作,此处为首页shop动作</span>

2.2 홈페이지 통합요청코드

<?<span>php
</span><span>//</span><span>首先载入框架类</span>
require <span>'</span><span>./framework/Framework.class.php</span><span>'</span><span>;
</span><span>//</span><span>运行项目</span>
Framework::run();

2.3 프레임워크 코드

<span>/*</span><span>*
 * 框架类 初始化基础功能
 </span><span>*/</span>
<span>class</span><span> Framework {
    </span><span>/*</span><span>*
     * 项目框架类的运行入口
     </span><span>*/</span>
    <span>public</span> <span>static</span><span> function run() {
        self::_initPathConst();</span><span>//</span><span>初始化路径常量</span>
        self::_initConfig();<span>//</span><span>加载配置</span>
        self::_initDispatchParam();<span>//</span><span>初始化分发参数</span>
        self::_initPlatformPathConst();<span>//</span><span>初始化平台相关的路径常量</span>
        self::_initAutoload();<span>//</span><span>注册自动加载方法</span>
        self::_dispatch();<span>//</span><span>请求分发</span>
<span>    }
}</span>

2.3.1 초기화 경로 상수

<span>/*</span><span>*
     * 初始化路径常量
     </span><span>*/</span>
    <span>private</span> <span>static</span><span> function _initPathConst() {
        </span><span>//</span><span>确定项目中使用的路径常量</span>
        define(<span>'</span><span>ROOT_PATH</span><span>'</span>, getCWD() . <span>'</span><span>/</span><span>'</span>);<span>//</span><span>项目的根目录</span>
<span>        
        define(</span><span>'</span><span>APP_PATH</span><span>'</span>, ROOT_PATH . <span>'</span><span>application/</span><span>'</span>);<span>//</span><span>应用程序目录</span>
        define(<span>'</span><span>CON_PATH</span><span>'</span>, APP_PATH . <span>'</span><span>controller/</span><span>'</span>);<span>//</span><span>控制器目录</span>
        define(<span>'</span><span>MOD_PATH</span><span>'</span>, APP_PATH . <span>'</span><span>model/</span><span>'</span>);<span>//</span><span>模型目录</span>
        define(<span>'</span><span>VIE_PATH</span><span>'</span>, APP_PATH . <span>'</span><span>view/</span><span>'</span>);<span>//</span><span>视图层目录</span>
        define(<span>'</span><span>CFG_PATH</span><span>'</span>, APP_PATH . <span>'</span><span>config/</span><span>'</span>);<span>//</span><span>配置文件目录</span>
<span>
        define(</span><span>'</span><span>FRW_PATH</span><span>'</span>, ROOT_PATH . <span>'</span><span>framework/</span><span>'</span>);<span>//</span><span>框架目录</span>
        define(<span>'</span><span>TOL_PATH</span><span>'</span>, FRW_PATH . <span>'</span><span>tool/</span><span>'</span>);<span>//</span><span>工具目录</span>
<span>
        define(</span><span>'</span><span>PUB_PATH</span><span>'</span>, ROOT_PATH . <span>'</span><span>public/</span><span>'</span>);<span>//</span><span>公共资源目录</span>
        define(<span>'</span><span>UPD_PATH</span><span>'</span>, PUB_PATH . <span>'</span><span>upload_image/</span><span>'</span>);<span>//</span><span>上传图片目录</span>
    }

2.3.2 구성 파일 로드

<span>private</span> <span>static</span><span> function _initConfig() {
        </span><span>//</span><span>载入加载配置文件,并将配置项的值保存与 $config,全局变量中。</span>
        $GLOBALS[<span>'</span><span>config</span><span>'</span>] = require CFG_PATH . <span>'</span><span>application.config.php</span><span>'</span><span>;
    }</span>

2.3.3 초기화 분포 매개변수

<span>/*</span><span>*
     * 确定p,c,a参数,分发参数,(路由参数)
     </span><span>*/</span>
    <span>private</span> <span>static</span><span> function _initDispatchParam() {
        </span><span>//</span><span>获得平台参数</span>
        $GLOBALS[<span>'</span><span>p</span><span>'</span>] = $p = isset($_GET[<span>'</span><span>p</span><span>'</span>]) ? $_GET[<span>'</span><span>p</span><span>'</span>] : $GLOBALS[<span>'</span><span>config</span><span>'</span>][<span>'</span><span>app</span><span>'</span>][<span>'</span><span>default_platform</span><span>'</span>];<span>//</span><span>p,platform
        </span><span>//</span><span>获得控制器类参数</span>
        $GLOBALS[<span>'</span><span>c</span><span>'</span>] = isset($_GET[<span>'</span><span>c</span><span>'</span>]) ? $_GET[<span>'</span><span>c</span><span>'</span>] : $GLOBALS[<span>'</span><span>config</span><span>'</span>][$p][<span>'</span><span>default_controller</span><span>'</span>];<span>//</span><span>c,controller
        </span><span>//</span><span>获得动作参数</span>
        $GLOBALS[<span>'</span><span>a</span><span>'</span>] = isset($_GET[<span>'</span><span>a</span><span>'</span>]) ? $_GET[<span>'</span><span>a</span><span>'</span>] : $GLOBALS[<span>'</span><span>config</span><span>'</span>][$p][<span>'</span><span>default_action</span><span>'</span>];<span>//</span><span>a,action</span>
    }

위 코드는 초기 로딩 구성 파일을 사용하여 기본 요청을 초기화합니다. 매개 변수 없이 localhost/index.php를 직접 요청하면 시스템 기본 매개 변수가 로드됩니다.

2.3.4 플랫폼 관련 경로 상수 초기화

<span>/*</span><span>*
     * 初始化当前平台相关的路径常量
     * 这个是用来判断P的,找到究竟是哪个控制下
     </span><span>*/</span>
    <span>private</span> <span>static</span><span> function _initPlatformPathConst() {
        </span><span>//</span><span>与当前平台相关的路径常量</span>
        define(<span>'</span><span>CUR_CON_PATH</span><span>'</span>, CON_PATH . $GLOBALS[<span>'</span><span>p</span><span>'</span>] . <span>'</span><span>/</span><span>'</span>);<span>//</span><span>当前平台的控制器目录</span>
        define(<span>'</span><span>CUR_VIE_PATH</span><span>'</span>, VIE_PATH . $GLOBALS[<span>'</span><span>p</span><span>'</span>] . <span>'</span><span>/</span><span>'</span>);<span>//</span><span>当前平台的视图层目录</span>
    }

2.3.4 등록 자동 로딩 방법

<span>private</span> <span>static</span><span> function _initAutoload() {
        </span><span>//</span><span>注册自动加载</span>
        spl_autoload_register(array(__CLASS__, <span>'</span><span>selfAutoload</span><span>'</span><span>));
    }
</span><span>'</span><span>selfAutoload</span><span>'</span><span>方法如下
</span><span>public</span> <span>static</span><span> function selfAutoload($class_name) {
        </span><span>//</span><span>先判断是否为框架核心类,框架中可以被确定的类</span>
        $class_file =<span> array(
            </span><span>'</span><span>Model</span><span>'</span> => FRW_PATH . <span>'</span><span>Model.class.php</span><span>'</span><span>,
            </span><span>'</span><span>MySQLDB</span><span>'</span> => FRW_PATH . <span>'</span><span>MySQLDB.class.php</span><span>'</span><span>,
            </span><span>'</span><span>Controller</span><span>'</span> => FRW_PATH . <span>'</span><span>Controller.class.php</span><span>'</span><span>,
            </span><span>'</span><span>SessionDB</span><span>'</span> => TOL_PATH . <span>'</span><span>SessionDB.class.php</span><span>'</span><span>,
            </span><span>'</span><span>Captcha</span><span>'</span> => TOL_PATH . <span>'</span><span>Captcha.class.php</span><span>'</span><span>,
            </span><span>'</span><span>Upload</span><span>'</span> => TOL_PATH . <span>'</span><span>Upload.class.php</span><span>'</span><span>,
            </span><span>'</span><span>Image</span><span>'</span> => TOL_PATH . <span>'</span><span>Image.class.php</span><span>'</span><span>,
            </span><span>'</span><span>Page</span><span>'</span> => TOL_PATH . <span>'</span><span>Page.class.php</span><span>'</span><span>,
        );
        </span><span>if</span><span> (isset($class_file[$class_name])) {
            </span><span>//</span><span>是核心类</span>
<span>            require $class_file[$class_name];
        }    
        </span><span>//</span><span>是否为模型类</span>
        elseif (substr($class_name, -<span>5</span>) == <span>'</span><span>Model</span><span>'</span><span>) {
            </span><span>//</span><span>模型类</span>
            require MOD_PATH . $class_name . <span>'</span><span>.class.php</span><span>'</span><span>;
        }
        </span><span>//</span><span>是否为控制器类</span>
        elseif (substr($class_name, -<span>10</span>) == <span>'</span><span>Controller</span><span>'</span><span>) {
            </span><span>//</span><span>控制器类</span>
            require CUR_CON_PATH . $class_name . <span>'</span><span>.class.php</span><span>'</span><span>;
        }
    }</span>

2.3.4 요청 배포

<span>/*</span><span>*
     * 请求分发
     * 将请求交由 某个控制器的某个动作完成
     </span><span>*/</span>
    <span>private</span> <span>static</span><span> function _dispatch() {
        </span><span>//</span><span>实例化控制器类,与 调用相应的动作方法
        </span><span>//</span><span>ucfirst() 函数把字符串中的首字符转换为大写。</span>
        $controller_name = ucfirst($GLOBALS[<span>'</span><span>c</span><span>'</span>]) . <span>'</span><span>Controller</span><span>'</span>;<span>//</span><span>match Match . Controller
        </span><span>//</span><span>载入控制器类</span>
        $controller = <span>new</span> $controller_name;<span>//</span><span>可变类名

        </span><span>//</span><span>调用动作方法</span>
        $action_name = $GLOBALS[<span>'</span><span>a</span><span>'</span>] . <span>'</span><span>Action</span><span>'</span><span>;
        $controller</span>->$action_name();<span>//</span><span>可变方法</span>
    }

2.3.5 localhost/index.php를 요청하는 것은 localhost/index.php?p=front&c=shop&a=index를 요청한 후 초기화하는 것과 같습니다

applicationcontrollerfront 아래의 ShopController 컨트롤러, 요청 작업은 indexAction입니다

indexAction 코드는 다음과 같습니다.

<span>public</span><span> function indexAction() {
        </span><span>//</span><span>得到分类数据</span>
        $model_cat = <span>new</span><span> CatModel;
        $cat_list </span>= $model_cat-><span>getNestedList();
        </span><span>//</span><span>载入前台首页模板</span>
        require CUR_VIE_PATH . <span>'</span><span>index.html</span><span>'</span><span>;
    }</span>

설명해야 할 내용은 다음과 같습니다.

1. ShopController는 PlatformController를 상속하고 플랫폼 컨트롤러는 기본 컨트롤러 클래스인 컨트롤러를 상속합니다

관계는 다음과 같습니다.

2. MVC에서 제어 작업을 결정한 후 다음 단계는 모델을 구현하는 것입니다

   $model_cat = <span>new</span><span> CatModel;   ——》 便是实例化catModel类
    $cat_list </span>= $model_cat->getNestedList();  ——》取得所有前台分类

3. 기본 모델에는 모든 기본 작업 데이터베이스 메소드가 캡슐화되어 있으며, 그 중 getNestedLIst 메소드는 다음과 같습니다

<span>/*</span><span>*
     * 得到嵌套的分类列表数据
     </span><span>*/</span>
    <span>public</span> function getNestedList($p_id=<span>0</span><span>) {
        </span><span>//</span><span>获得所有分类</span>
        $list = $<span>this</span>-><span>getList();
        </span><span>//</span><span>制作嵌套的数据,递归查找</span>
        <span>return</span> $<span>this</span>-><span>getNested($list, $p_id);
    }</span>

4. getList 메소드는 다음과 같습니다

 <span>/*</span><span>*
     * 获得列表数据
     </span><span>*/</span>
    <span>public</span><span> function getList() {
        $sql </span>= <span>"</span><span>select * from `php_category`</span><span>"</span><span>;
        </span><span>return</span> $<span>this</span>->_db-><span>fetchAll($sql);
    }</span>

5. 모델 구현 후 뷰 로드

    <span>//</span><span>载入前台首页模板</span>
    require CUR_VIE_PATH . <span>'</span><span>index.html</span><span>'</span>;

2.3.6 요약: 기능을 구현하려면 먼저 Control을 결정한 다음 Model을 구현하고 마지막으로 View를 로드합니다

2.3.7 렌더링은 첫 페이지에 설명되지 않습니다

위 내용은 PHP 프로젝트(1)의 Store mvc 프레임워크에 대한 내용을 요약하여 소개한 내용이며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.