[[oktatas:programozás:php|< PHP]]
====== Kódszervezés ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2014, 2015, 2020
* Licenc: GNU Free Documentation License 1.3
* Web: http://szit.hu
===== Bevezetés =====
Minél nagyobb egy projekt, és/vagy minél hosszabb az életciklusa, a kód könyvtárakba
szervezése annál fontosabb. Sokan sokféle könyvtár struktúrát, különféle
elnevezési szokássokkal szoktak ajánlani. Itt most kiragadtam néhányat,
hogy mindenki válogathasson kedvére.
===== Példa 001 =====
approot/
|--inc/
|--dao/
|--scripts/
|--styles/
|--img/
|--static/
|--caches/
|--templates/
`--index.php
* inc - lényeges beemelt (include) fájlok
* dao - adatbázis függvények és osztályok
* scripts - javascript fájlok
* styles - CSS fájlok
* img - képek
* static - statikus tartalom - például felhasználó képei
* caches - átmeneti tároló
* templates - template és nézetfájlok
===== Példa 002 =====
projekt1/
|--css/
|--img/
|--js/
|--functions/
|--views/
`--index.php
===== Példa 003 =====
projekt1/
|--web/
| |--css/
| |--js/
| |--images/
| `--index.php
|--config/
`--lib/
Ebben a példában van egy web könyvtár, amely publikus az látógatók
számára. A config és a lib, azonban nem, mivel a web könyvtár a
a webhely gyökérkönyvtára.
projekt1/
|--web/
| |--css/
| |--js/
| |--images/
| `--index.php
|--config/
|--controller/
|--helpers/
|--lib/
|--modules/
`--views/
===== Példa 004 =====
application/
|--config/
|--css/
|--helpers/
|--images/
|--js/
|--lib/
|--modules/
| `--blog/
| |--controllers/
| |--models/
| `--views/
|--views/
`--index.php
* helpers - függvénygyűjtemény
===== Példa 005 =====
Vannak olyan típusú szerkezetek, ahol azt mondják
legyen egy "app", vagy hasonló könyvtár ide kerüljenek
a háttérben (backend) elhelyezhető részek. Naplózás,
beállítások, könyvtárak stb. Legyen egy "public" vagy
"web", vagy hasonló könyvtár ahova a nyilvános részeket
tesszük, úgymint: CSS, JavaScript, stb. Ha pedig szükséges
legyen egy "test" könyvtár a tesztekhez.
projekt1/
|--app/
| |--lang/
| |--routes/
| |--src/
| `--templates/
|--test/
`--web/
|--assets/
|--images/
|--scripts/
|--styles/
`index.php
* test - tesztek
===== Példa 006 =====
projekt1/
|--app/
| |--controllers/
| |--models/
| `--views/
|--public/
| |--css/
| |--img/
| |--js/
| `--index.php
`--tests/
===== Példa 007 =====
projekt1/
|--htdocs/
| |--css/
| |--img/
| `--js/
`--resources/
|--library/
|--templates/
`--config.php
* library - harmadik fél könyvtárai
* templetes - újrahasználható elemek
===== Példa 008 =====
projekt1/
|--public_html/
| |--css/
| |--img/
| | |--content/
| | `--layout/
| `js/
`resources/
|--library/
|--templates/
`--config.php
* css - saját CSS állományaid
* img - saját képeid
* js - saját JavaScript állományaid
* library - minden egyéni és harmadik fél könyvtára
* templates - saját újrahasznosítható elrendezéseid
* config.php - a fő konfigurációs fájl
===== Pelda 009 =====
projekt01/
|--controller/
| |--viselkedes.js
| `--kapcsolas.php
|--model/
| |
| `--uzletiLogika.php
`--view/
|--index.html
|--style.css
`--updates.js
===== Pelda 010 =====
projekt01/
|--bin/
|--config/
|--docs/
|--public/
|--resources/
|--src/
|--templates/
|--tests/
|--translations/
===== Pelda 011 =====
projekt01/
|--database/
| `--projekt01.sql
|--draft/
| `--projekt01.dia
|--src/
| |--css/
| | `--style.css
| |--images/
| |--includes/
| | |--config.php
| | `--db.php
| |--templates/
| | |--foot.tpl
| | |--head.tpl
| | |--index.tpl
| | |--mas.tpl
| | |--menu.tpl
| | `--valami.tpl
| |--index.php
| |--mas.php
| `--valami.php
`--tests/
`--valami.phpt
===== Pelda 012 =====
projekt01/
|--database/
| `--projekt01.sql
|--draft/
| `--projekt01.dia
|--src/
| |--css/
| | `--style.css
| |--images/
| |--includes/
| | |--config.php
| | `--db.php
| |--templates/
| | |--foot.tpl
| | |--head.tpl
| | |--index.tpl
| | |--mas.tpl
| | |--menu.tpl
| | `--valami.tpl
| |--views/
| | |--mas.php
| | `--valami.php
| `--index.php
`--tests/
|--mas.phpt
`--valami.phpt
===== Pelda 013 =====
projekt01/
|--database/
|--draft/
`--web/
|--config/
| `--config.php
`--htdocs/
|--includes/
| `--db.php
|--templates/
|--views/
`--index.php
===== Függelék =====
==== Konfigfájl elhelyezése ====
/home/
virtual-www/
zold.and/
htdocs/
index.php
config/
mysql.json
$_SERVER['DOCUMENT_ROOT'] = /home/virtual-www/zold.and/htdocs/
==== Hibák mutatása ====
A hibák mutatása, esetleg a config.php végére:
ini_set("error_reporting", "true");
error_reporting(E_ALL|E_STRCT);
==== Praktikák ====
* A "includes" könyvtár helyett jó az "inc_" vagy az "inc" könyvtár.
* A CSS könyvtár lehet: "styles", "css", "stylesheets"
* Adminisztrációs célokra az "admin" könyvtár jó megoldás.
A konfigfájl olvasása:
require_once(realpath(dirname(__FILE__) . "/../config.php"));
Az alapkönyvtár beállítása:
define('ROOT', str_replace('\\', '/', __DIR__));
Esetleg:
define('LIBRARY_PATH', ROOT . '/application/libraries');
include(LIBRARY_PATH . '/valami.php');
Hibakezelés:
ini_set("error_reporting", "true");
error_reporting(E_ALL|E_STRCT);
==== Konfigurációs fájl ====
array(
"baseUrl" => "http://pelda.hu"
),
"paths" => array(
"resources" => "/path/to/resources",
"images" => array(
"content" => $_SERVER["DOCUMENT_ROOT"] . "/images/content",
"layout" => $_SERVER["DOCUMENT_ROOT"] . "/images/layout"
)
),
"db" => array(
"db1" => array(
"name" => "nev1",
"user" => "felhasznalo",
"pass" => "titok",
"host" => "localhost"
)
)
);
===== Linkek =====
Könyvtár struktúra:
* https://github.com/phalcon/mvc (MVC struktúrák gyűjteménye)
* http://www.onextrapixel.com/2011/12/12/building-web-apps-file-and-directory-structures/
* http://code.tutsplus.com/tutorials/organize-your-next-php-project-the-right-way--net-5873
* http://code.tutsplus.com/tutorials/organize-your-next-php-project-the-right-way--net-5873
Keretrendszerek:
* https://github.com/vlucas/bulletphp-skeleton
* http://www.codeigniter.com/
* https://github.com/packfire/packfire-app
* http://symfony.com/
* https://code.google.com/p/samstyle-php-framework/
Függőségkezelő:
* https://getcomposer.org/
Konfigfájlok:
* https://github.com/EvanDotPro/zf2-di/blob/master/application/init.php