我正在以这种结构构建一个支持PHP的网站:
/public
/js
/css
/img
/index.php
.htaccess
/site
/inc
_header.php
_footer.php
.
.
/func
_base.php
.htaccess
.
.
所以一个公共目录和源(站点)目录,所有呼叫都路由到index.php,这就是结构,但我是一个新手,我发现开始时遇到了麻烦。所有页面将作为$_GET
请求传递给索引,并包含相应的布局/文件。但如果它像index.php?products=prod&page=info
对于模板我会像这样使用普通/香草PHP:
产品name.php:
$product = array(...);
include_once INC_DIR."products.tpl.php"
这是一个学习项目,但我打算使用这种方法创建一个个人网站。
很抱歉,如果它似乎是一个模糊的问题,我是 PHP 的新手,英语不是我原生的Lango。
干杯!
答案 0 :(得分:1)
这可能过于广泛,因为没有明确的答案 - 但是你要求恳切地提出建议,所以我会把这个社区维基回答,任何人都可以改进(或者按照他们认为合适的方式杀掉)。
我认为你有一个良好的开端,但还有一些事情要考虑:
将http文件与应用程序文件分开是一个好主意,但我将来会将其拆分,而不是:
/public
将其拆分为:
/http
/https
为您提供两个文档根,一个用于http文档,另一个用于https。这样,将来,如果您需要添加SSL证书,您可以将安全部分与非安全部分完全分开。这意味着如果您在/https
下放置一个“与我们联系”表单(例如),则永远无法通过http访问它 - http://www.example.com/contact根本不起作用(它不会在该docroot下存在。
如果您添加的CMS也可能拥有自己的文档根目录,以便您可以完全锁定它(例如,限制通过IP地址访问),并且还应具有SSL证书。
/site
目录的结构完全取决于您,但可能值得查看MVC pattern。从本质上讲,这是一种分离问题的方法,模型,查看和控制器。一个非常简化的解释是:
模型是您的事物 - 它实际上是一个包含您的类以及它们如何与数据库通信的整个层。您可能拥有一个Product
类,其中包含产品的结构,以及一个关联的产品/数据库类,用于在数据库中获取和更新该产品。
观看次数是您的模板 - 实际上就是您在屏幕上显示内容的方式。
控制器是将所有内容粘在一起的粘合剂 - 因此产品类别控制器会知道如何使用类别ID(来自Category
)来获取$_GET
模型它本身与数据库中的类别介绍和所有相关产品(它们将从数据库传播)。然后,Controller将附加“类别视图”以生成您在屏幕上看到的内容。
考虑到这一点,您的/site
文件夹可能看起来更像:
/site
App.php // core application class (eq base.php)
/model
/category
Category.php
/db
Category.db.php
/product
Product.php
/db
Product.db.php
/user
User.php
/db
User.db.php
/controller
IndexController.php // for the homepage perhaps
CategoryController.php // for a product category
ProductController.php // for a product
/view
Index.phtml
Category.phtml
Product.phtml
/sub
header.phtml
footer.phtml
<强>的index.php 强>
索引文件现在只是变成一种路由器 - 你传递变量并获取执行所需操作的相关控制器。
基本上它将是一个非常稀疏的文件,它可以简单地说:
require_once realpath("path/to/App.php");
$app = App::start(); // using a Singleton Pattern
$app->fetch($_GET)->content();
单身人士模式: Creating the Singleton design pattern in PHP5
大多数MVC系统使用Apache mod_rewrite
到route all requests to the index page之类的东西。这允许您使用RESTful URLs之类的http://www.example.com/toys/dinosaurs - 您的控制器然后获取与 / toys / dinosaurs 相关的数据;例如,可以使用数据库中的url
表将其映射到类别。
这基本上是大多数框架在PHP中的工作方式,但您可能有兴趣看一些灵感,教育或在此项目中使用一个:
......还有哦,其他很多......