簡體   English   中英

PHP 的項目結構

[英]Project structure for PHP

我是 PHP 新手,想知道 php 項目的目錄結構。 我有 Java 方面的經驗,在 Java 中我們有 src 包含 java 源文件,WEB-INF 包含 lib 和 jsp 頁面。 我們在 PHP 中有任何類似的標准目錄結構嗎? 我們在 php 中是否也有分層,就像我們在 java 中有層一樣(例如 Web、服務、DAO 層)

我瀏覽了幾個鏈接。 但每個人給出的答案都不一樣。

不確定我們是否可以比較這兩種語言。 我只是想堅持一些標准。

提前致謝。

不。 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 分鍾的博客視頻,看看有什么好玩的,然后試運行幾天。 如果您不喜歡它,請切換到另一個。

隨着 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之下。

在任何這些目錄中組織 PHP 源文件的任務仍然取決於您,但本文中列出一些我同意的建議:按類型(控制器、實體、服務)排序,或按功能排序(用戶、登錄、購物車、目錄、文章、評論)——后者將屬於一個功能的所有代碼保存在目錄(或幾個子目錄)中,這通常似乎是更好的文件組織方式。

按類型組織時,您會發現自己經常在目錄之間跳轉,而且您無法很好地了解代碼的內容——您總是有“控制器”,但很少有“StampCollection”。

我傾向於為我的后端項目使用基於功能的文件夾結構。 每個功能文件夾都有自己的控制器、管理器和路由文件。 這適用於api后端。 它看起來像https://blog.nikolaposa.in.rs/2017/01/16/on-structuring-php-projects/

例如,我們有一個帶有 CustomerController、CustomerRepository、CustomerRoutes 的 Customer 特性。

我的文件夾結構如下所示:

- 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

不幸的是(或不是?)您對 PHP 非常自由。 由你決定。

這是我的結構:

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

您可以通過 .htaccess 控制訪問。

對於圖書館,我使用以下結構......另外我已經包含了我沒有使用的建議(還)

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、自動加載器會有一些標准,但是……在目錄結構方面並非如此。

您可以查看laravelwordpressPHP Mailer其他 php 庫以查看示例並了解您最喜歡的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM