[[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