update
This commit is contained in:
79
docs/AUTOLOADER_REFACTORING.md
Normal file
79
docs/AUTOLOADER_REFACTORING.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Refaktoryzacja autoloadera — centralizacja
|
||||
|
||||
## Problem
|
||||
|
||||
Funkcja `__autoload_my_classes()` jest zduplikowana w każdym entry poincie:
|
||||
- `index.php`
|
||||
- `admin/index.php`
|
||||
- `admin/ajax.php`
|
||||
- `ajax.php`
|
||||
- `api.php`
|
||||
- `cron.php`
|
||||
- `download.php`
|
||||
- `cron-turstmate.php`
|
||||
- `cron/cron-xml.php`
|
||||
|
||||
Każdy plik zawiera identyczną (lub prawie identyczną) kopię autoloadera. Warianty różnią się ścieżką bazową (`autoload/` vs `../autoload/`) i drobnymi detalami (np. Savant3 special case tylko w `admin/ajax.php`).
|
||||
|
||||
## Rozwiązanie
|
||||
|
||||
Utworzyć centralny plik `autoload/autoloader.php` z jedną definicją autoloadera, używając `__DIR__` zamiast ścieżek relatywnych.
|
||||
|
||||
### Plik: `autoload/autoloader.php`
|
||||
|
||||
```php
|
||||
<?php
|
||||
function __autoload_my_classes( $classname )
|
||||
{
|
||||
$base = __DIR__ . '/';
|
||||
|
||||
$q = explode( '\\', $classname );
|
||||
$c = array_pop( $q );
|
||||
|
||||
// Savant3 — special case
|
||||
if ( $c == 'Savant3' )
|
||||
{
|
||||
$f = $base . 'Savant3.php';
|
||||
if ( file_exists( $f ) ) { require_once( $f ); return; }
|
||||
}
|
||||
|
||||
$path = implode( '/', $q );
|
||||
|
||||
// 1. Legacy: class.ClassName.php
|
||||
$f = $base . $path . '/class.' . $c . '.php';
|
||||
if ( file_exists( $f ) ) { require_once( $f ); return; }
|
||||
|
||||
// 2. PSR-4: ClassName.php
|
||||
$f = $base . $path . '/' . $c . '.php';
|
||||
if ( file_exists( $f ) ) require_once( $f );
|
||||
}
|
||||
|
||||
spl_autoload_register( '__autoload_my_classes' );
|
||||
```
|
||||
|
||||
### Zmiana w entry pointach
|
||||
|
||||
Zamienić definicję funkcji + `spl_autoload_register` na jedną linię:
|
||||
|
||||
```php
|
||||
// Root entry points (index.php, ajax.php, api.php, cron.php, download.php):
|
||||
require_once __DIR__ . '/autoload/autoloader.php';
|
||||
|
||||
// Admin entry points (admin/index.php, admin/ajax.php):
|
||||
require_once __DIR__ . '/../autoload/autoloader.php';
|
||||
|
||||
// Cron subdirectory (cron/cron-xml.php):
|
||||
require_once __DIR__ . '/../autoload/autoloader.php';
|
||||
```
|
||||
|
||||
## Korzyści
|
||||
|
||||
- **DRY** — jedna definicja zamiast 9+ kopii
|
||||
- **Bezpieczeństwo** — poprawka w jednym miejscu działa wszędzie
|
||||
- **`__DIR__`** — ścieżki absolutne, niezależne od cwd
|
||||
- **Savant3** — obsłużony centralnie, nie tylko w admin/ajax.php
|
||||
|
||||
## Uwagi
|
||||
|
||||
- Reszta kodu w entry pointach (config.php, medoo, session) pozostaje bez zmian
|
||||
- Rozwiązanie wdrożone i przetestowane w cmsPRO
|
||||
Reference in New Issue
Block a user