PHP的项目结构

时间:2013-10-29 02:47:30

标签: php directory structure

我是PHP的新手,想知道php项目的目录结构。我有Java和java的经验,我们有src包含java源文件,WEB-INF包含lib和jsp页面。我们在PHP中有任何类似的标准目录结构吗? 我们也在php中进行分层,就像我们在java中有层(例如Web,Service,DAO层)

我浏览了几个链接。但是每个人都给出了不同的答案。

不确定我们是否可以比较这两种语言。我只想坚持一些标准。

提前致谢。

5 个答案:

答案 0 :(得分:25)

不。 PHP是你的成就。它可以是非常简单的平面文件,也可以是你想要的。

话虽如此,有一些商定的编码标准,但没有“强制执行”所述标准。它们被称为PSR(PHP标准推荐)。这里有一个背景:http://net.tutsplus.com/tutorials/php/psr-huh/
您可以在此处逐个查看标准:http://www.php-fig.org/psr/

大多数主要框架都遵循这些标准,如果您打算使用这些标准,可能更容易使用该流程。

同样,每个框架,项目,插件,程序等都有不同的布局和不同的项目结构。一个常见的结构是这样的:

-framework_dir
-public_html
    -js
    -img
    -css
    -index.php
    -protected/private
        -controllers
        -models
        -views
        -etc

然后,他们使用.htaccess文件来阻止对受保护目录的访问。同样,这只是我在几个框架中看到的常见表示。如果您正在进行个人项目,只需使用对您来说舒适的东西。每个框架都会为您提供一个不同的库或方式来访问数据。没有“层”,但每个框架都有处理不同区域的对象(电子邮件,数据库,缓存,http,日志等)。因为有几十种受欢迎的产品,所以您可以根据自己的理念或项目找到合适的产品。观看一些5分钟的博客视频,看看是什么,然后给它试运行几天。如果您不喜欢它,请切换到另一个。

答案 1 :(得分:3)

不幸的是(不是吗?)你对PHP非常自由。由你决定。

这是我的结构:

framework/
controllers/             
models/
configs/
files/
templates/
themes/
tmp/
index.php
init.php
.htaccess

您可以通过.htaccess控制访问权限。

答案 2 :(得分:3)

随着Composer的发明,人们现在有一个中心位置来注册他们的项目供全世界消费,现在其他人可以查看该代码库并看到相似之处。

结果如下:https://github.com/php-pds/skeleton

简而言之:

If a package has a root-level directory for ...
                            ... then it MUST be named:
command-line executables    bin/
configuration files         config/
documentation files         docs/
web server files            public/
other resource files        resources/
PHP source code             src/
test code                   tests/

本标准未就srcpublic下的哪些目录存在任何进一步的建议。我建议只在src之下设置一个名称空间,并实现"模型","控制器"的任何多样化。通过完全限定的类名来实现,例如如果决定使用Projectname\Controller\WhateverController类,它将驻留在PSR-4兼容路径src/Controller/WhateverController.php中,并通过Composer "autoload":{"psr-4":{"Projectname\\": "src"}}自动加载。

答案 3 :(得分:2)

我倾向于为后端项目使用基于功能的文件夹结构。 每个功能文件夹都有自己的控制器,管理器和路由文件。这对于 api 后端非常有效。它看起来像https://blog.nikolaposa.in.rs/2017/01/16/on-structuring-php-projects/

例如,我们具有一个Customer功能,其中包含CustomerController,CustomerRepository,CustomerRoutes等。

我的文件夹结构如下:

- build/
-- phpdox.xml
-- phpmd.xml
-- phpunit.dist.xml
- config/
- public/
-- .htaccess
-- index.php
-- assets/
- src/
-- Customer/
--- CustomerController.php
--- CustomerRepository.php
--- Customer.php
--- customer.routes.php
- tests/
- vendor/
composer.json
.gitignore

答案 4 :(得分:0)

对于图书馆,我使用的是以下结构...加上我还没有使用的建议(还)

PROJECT ROOT
|--composer.json
|--README.md
|--docs //for documentation files
|--tests //for Unit Tests
|--vendor //for external libraries (if everything isn't included through composer)
|--examples //examples of the library being used
|--config //any configuration files you may have
|--src  //where the library's actual code "lives"
   |--php //php source code, classes, any other scripts
   |--View //html views, but actually php files that output html
   |--Style //contains .css files
   |--Script //contains .js files
   |--Res   //contains other deliverable resource files. Could be mp3 files, json etc

当前,我仅在根文件中使用composer.jsonREADME.mdsrc。但是到这一点时,我可能会使用我所描述的其他方法。

我绝对不认为这是“正确的”。而且此设置仅适用于我,因为我对每个请求都有一个php路由器。使用.htaccess,您可以将.css文件路由到/src/Style/requested_file.css

我希望清理项目根目录,并且已经实现了这一目标。 PHP Fig没有用于目录结构的PSR,我知道。我曾希望PSR-4, autoloader能够有一些标准,但是……关于目录结构,不是真的。

您可以查看laravelwordpressPHP Mailerother php libraries来查看示例并查看您最喜欢的内容