在此结构中构建简单PHP网站的最佳做法是什么?

时间:2015-11-20 16:53:00

标签: php templates

我正在以这种结构构建一个支持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。

干杯!

1 个答案:

答案 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_rewriteroute all requests to the index page之类的东西。这允许您使用RESTful URLs之类的http://www.example.com/toys/dinosaurs - 您的控制器然后获取与 / toys / dinosaurs 相关的数据;例如,可以使用数据库中的url表将其映射到类别。

这基本上是大多数框架在PHP中的工作方式,但您可能有兴趣看一些灵感,教育或在此项目中使用一个:

......还有哦,其他很多......