Cześć,
wykonuję pierwszy większy projekt w PHP, który dodatkowo będzie często rozwijany o kolejne funkcje, więc musi być łatwo skalowalny.
Napotkałem pewien problem - nazwijmy - logistyczny, związany z ułożeniem plików w folderach. Konkretnie: tworzę wiele plików zawierających pojedyncze funkcje, jak np:
- Funkcja startująca sesję, jeżeli jeszcze jej nie ma (program posiada API, aplikacja kliencka działa asynchronicznie),
- Funkcja autoryzująca zalogowanego użytkownika,
- Funkcja sprawdzająca, czy użytkownik posiada konkretne uprawnienie,
- itd...
Funkcje te wykorzystywane będą w wielu miejscach w kodzie, w różnych podfolderach. Same jednak potrzebują dostępu m. in. do pliku zawierającego konfigurację bazy danych.
Np: projekt / functions / auth / test.php:
function __test() {
$db = require('../../config/db.php');
// do something...
}
Teraz wykorzystuję ją w: projekt / api / api_test.php:
function api_test() {
require_once('../functions/auth/test.php');
__test();
// do something...
}
Problem polega na tym, że kiedy dodaję taką funkcję __test do innego pliku z użyciem require() / require_once(), to jest ona "wklejana" w tym miejscu, przez co funkcja ta nie może pobrać konfiguracji bazy danych, zmienia się ścieżka. Oczywiście funkcja ta wykorzystywana będzie też w wielu innych miejscach.
Czego chciałbym uniknąć, to na pewno wysyłania jako argument do funkcji __test ścieżki do konfiguracji, oraz wykorzystania zmiennej $_SERVER['DOCUMENT_ROOT'], gdyż możliwe, że aplikacja będzie przeniesiona np. na jakąś podstronę / subdomenę.
Jestem otwarty na różne propozycje, nawet zmianę zamysłu układania plików i przebudowę tego, co już zdążyłem napisać. Proszę o podpowiedź jak rozwiązać taki problem, może jest jakiś sposób na "wywołanie" funkcji w jej oryginalnej pozycji, czy po prostu zawsze wszystko podpinać do pliku głównego (w tym wypadku api_test.php) i wysyłanie jako argument...?
Dzięki i pozdrawiam! :D