< PHP

Kódszervezés

Szerző: Sallai András

Copyright © 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

<?php $app['baseUrl'] = "http://pelda.hu"; $app['resources'] = "/path/to/resources" $db['name'] = "nev1"; $db['user'] = "felhasznalo"; $db['pass'] = "titok"; $db['host'] = "localhost";
<?php $config = array( "urls" => 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