从开发到生产的 MVC 架构

MVC Architecture from Development to Production

我正在努力更好地理解 MVC 体系结构。我使用 LAMP 堆栈编写前端和后端 Web 应用程序。我还没有使用任何框架。我在 Notepad++ 中编写代码并使用 WinSCP 进行文件传输(终端用 Putty)。所有服务器端编码都在 PHP.

中完成

根据我的阅读,这是我对 MVC 文件结构的最佳猜测:

+ -- Project1
|    + -- models
|    |    + -- model.php
|    + -- views
|    |    + -- view.php
|    + -- controllers
|    |    + -- controller.php
+ -- Project2
|    + -- models
|    |    + -- model.php
|    + -- views
|    |    + -- view.php
|    + -- controllers
|    |    + -- controller.php

因此,虽然有很多关于什么是模型、视图和控制器的文章和博客,但除了我在上面收集的内容之外,我还没有看到任何关于如何设置它们的信息。

我不知道它是如何与我服务器上的 public 文件夹集成的。这是我的猜测,假设 /var/www/html/ 是我的 public 目录。

+ -- var
|    + -- www
|    |    + -- html
|    |    |    + -- my-application-1.php
|    |    |    |
|    |    |    + -- my-application-2.php
|    |    + -- Project1
|    |    |    + -- models
|    |    |    |    + -- model.php
|    |    |    + -- views
|    |    |    |    + -- view.php
|    |    |    + -- controllers
|    |    |    |    + -- controller.php
|    |    + -- Project2
|    |    |    + -- models
|    |    |    |    + -- model.php
|    |    |    + -- views
|    |    |    |    + -- view.php
|    |    |    + -- controllers
|    |    |    |    + -- controller.php

根据我读到的内容(也许我错了),我假设人们将他们的整个项目 "behind" 放在他们的 public 文件夹中。我还假设您将最终的申请文件(my-application1.phpmy-application-2.php)放在您的 public 文件夹中供互联网上的人使用,并参考(php 的 include/require) 您的模型、视图和控制器来自该应用程序文件。我从来没有在我的 public 文件后面引用过文件,但我在这里假设了很多。

有人可以帮我验证一下吗?相对于我的 linux 服务器的其余部分应该如何设置?我假设有什么不正确的地方需要您更正吗?

我试图在选择任何框架(可能倾向于 Zend、Laravel 或 CakePHP)之前对此有一个很好的理解。我读过框架对此有帮助,但我目前没有资源来设置框架,我想在尝试向我的团队推销之前对此有充分的了解。

这在很大程度上取决于您选择使用的框架,但一般的想法是实际的源目录不存储在 Web 根目录中。我在部署中使用 /web/projects,然后将 public 文件夹符号链接到 htdocs

> cd /var/www/html
> ln -s /web/projects/myProject/public myproject

然后您通常会在 public 文件中有一个 index.php 文件来启动。通常还有一个 .htaccess 文件拦截所有请求并将它们指向该文件。

最好的选择是选择一个框架(Laravel 和 Symfony 是很好的选择)并遵循入门指南。

你在你的问题中说你没有资源来建立一个框架,但你必须有资源从头开始构建一个,甚至根本不知道你在做什么?

相信我,你不想自己做。至少,您应该首先尝试一些现有的框架,例如 symfony2 或 zf2 或任何您喜欢的框架。

当您熟悉其中一些并了解它们的工作原理后,您将能够创建自己的并在需要大量工作的情况下放弃。

无论如何,为了回答这个问题,zend framework 1 的结构如下

project
|-- application
|   |-- Bootstrap.php
|   |-- configs
|   |   `-- application.ini
|   |-- controllers
|   |   |-- ErrorController.php
|   |   `-- IndexController.php
|   |-- models
|   `-- views
|       |-- helpers
|       `-- scripts
|           |-- error
|           |   `-- error.phtml
|           `-- index
|               `-- index.phtml
|-- library
|-- public
|   |-- .htaccess
|   `-- index.php

使用此框架,您可以将 Web 根目录设置为 /path/to/project/public。 如您所见,none 的应用程序代码可直接从 Web 访问。所有传入的请求都通过所有魔法所在的 index.php。

如果您有兴趣了解真正的魔法是什么,所有 php Web 框架都是开源的,所以您可以自己检查一下:

ZF2 on github

Sf2 on guthub