Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这种结构中构建简单PHP网站的最佳实践是什么?_Php_Templates - Fatal编程技术网

在这种结构中构建简单PHP网站的最佳实践是什么?

在这种结构中构建简单PHP网站的最佳实践是什么?,php,templates,Php,Templates,我正在以这种结构构建一个支持PHP的网站: /public /js /css /img /index.php .htaccess /site /inc _header.php _footer.php . . /func _base.php .htaccess . . 所以一个公共目录和源(站点)目录,所有调用都被路由到index.php,这就是它的结构,但我是一个新手,在开始时遇到了麻烦。所有页面将作为$\u GET请

我正在以这种结构构建一个支持PHP的网站:

/public
  /js
  /css
  /img
  /index.php
  .htaccess
/site
  /inc
    _header.php
    _footer.php
    .
    .
  /func
  _base.php
  .htaccess
  .
  .
所以一个公共目录和源(站点)目录,所有调用都被路由到index.php,这就是它的结构,但我是一个新手,在开始时遇到了麻烦。所有页面将作为
$\u GET
请求传递到索引,并将包括适当的布局/文件。但是如果像
index.php?products=prod&page=info

对于模板,我将使用普通/普通PHP,如下所示:

product-name.php:

   $product = array(...);
   include_once INC_DIR."products.tpl.php"
这是一个学习项目,但我打算用这种方法制作一个个人网站

抱歉,如果这是一个模糊的问题,我是新来的PHP英语不是我的母语


干杯

这可能太宽泛了,因为没有明确的答案-但是你在认真征求意见,所以我将把这作为一个社区维基答案,任何人都可以改进(或者在他们认为合适的时候取消)


我认为你有了一个良好的开端,但有几件事需要考虑:

将http文件与应用程序文件分开是个好主意,但我以后会将其进一步分开,而不是:

/public
将其分为:

/http
/https
为您提供两个文档根,一个用于http文档,另一个用于https。这样,将来如果需要添加SSL证书,可以将安全部分与非安全部分完全分开。这意味着,如果您在
/https
下放置一个“联系我们”表单(例如),它永远无法通过http访问-根本无法工作(它在该docroot下不存在)

如果您添加一个CMS,该CMS也可以有自己的文档根,以便您可以完全锁定它(例如,通过IP地址限制访问),并且还应该有一个SSL证书


您的
/site
目录的结构完全取决于您自己,但它可能值得一看。本质上,这是一种分离关注点的方法,模型视图控制器。一个非常简单的解释是:

模型是你的东西-它实际上是一个完整的层,包含你的类以及它们如何与数据库通信。您可能有一个保存产品结构的
Product
类,以及一个关联的产品/数据库类,该类在数据库中执行该产品的获取和更新

视图是您的模板-基本上是您在屏幕上显示内容的方式

控制器是将所有东西粘在一起的粘合剂-因此产品类别控制器将知道使用类别id(从
$\u GET
)获取
类别
模型,该id将通过数据库中的类别介绍和所有相关产品进行传播(这将从数据库中传播)。然后控制器将附加类别视图以生成您在屏幕上看到的内容

考虑到这一点,您的
/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();
单件模式:

大多数MVC系统使用类似Apache的
mod_rewrite
to。这允许您使用like-您的控制器然后获取与/toys/恐龙相关的数据;例如,可以使用数据库中的
url
表将其映射到类别

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

  • 法尔康
  • Symfony
  • Laravel
  • Yii

…哦,还有很多其他的…

不幸的是,我担心这可能不适合堆栈溢出(太宽)…这是一个遗憾,因为我非常喜欢这个问题。@cd001我只是想征求关于如何处理它的建议和技巧,而不是完整的源代码。