Inhaltsverzeichnis
php项目中商店mvc框架总结(1),mvc框架
Heim php教程 php手册 php项目中商店mvc框架总结(1),mvc框架

php项目中商店mvc框架总结(1),mvc框架

Jun 13, 2016 am 09:12 AM
mvc php 代码 Geschäft 总结 框架 von derzeit 目录 结构

php项目中商店mvc框架总结(1),mvc框架

1.代码结构的划分:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<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入口文件

Nach dem Login kopieren

2.请求首页

2.1请求首页参数实例(请求localhost/index.php?p=front&c=shop&a=index)

1

2

3

P=front  <span>//</span><span>后台还是前台 参数有back和front</span>

C=index   <span>//</span><span>控制器,此处请求首页控制器</span>

A=shop   <span>//</span><span>动作,此处为首页shop动作</span>

Nach dem Login kopieren

2.2 首页统一请求代码

1

2

3

4

5

<?<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();

Nach dem Login kopieren

2.3框架类代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<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>

Nach dem Login kopieren

2.3.1初始化路径常量

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<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>

    }

Nach dem Login kopieren

2.3.2加载配置文件

1

2

3

4

<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>

Nach dem Login kopieren

2.3.3初始化分发参数

1

2

3

4

5

6

7

8

9

10

11

<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>

    }

Nach dem Login kopieren

以上代码中用到了初始加载配置文件,初始化默认请求,当你直接请求:localhost/index.php,没有参数的时候,加载系统默认参数

2.3.4初始化平台相关的路径常量

1

2

3

4

5

6

7

8

9

<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>

    }

Nach dem Login kopieren

2.3.4注册自动加载方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<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>

Nach dem Login kopieren

2.3.4 请求分发

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<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>

    }

Nach dem Login kopieren

2.3.5当我们请求localhost/index.php的时候,相当于请求localhost/index.php?p=front&c=shop&a=index于是将初始化

application\controller\front下的ShopController控制器,请求动作为indexAction

indexAction代码如下:

1

2

3

4

5

6

7

<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>

Nach dem Login kopieren

需要说明的是:

1、ShopController继承与平台控制器PlatformController,平台控制器继承于基础控制器类:controller

关系如下:

2、在确定好MVC中的,Control动作后,接下来就是实现Model

1

2

$model_cat = <span>new</span><span> CatModel;   &mdash;&mdash;》 便是实例化catModel类

 $cat_list </span>= $model_cat->getNestedList();  &mdash;&mdash;》取得所有前台分类

Nach dem Login kopieren

3、在基础模型中,封装好所有基础操作数据库方法,其中getNestedLIst方法如下

1

2

3

4

5

6

7

8

9

<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>

Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

CakePHP-Projektkonfiguration

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

CakePHP-Routing

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

See all articles