![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 79 Dołączył: 16.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Hej,
Piszę swój własny mini-framework (wiem, wiem, głupota:)) Mimo, że ma być mini-mini, to chciałbym by był zgodny z najnowszymi trendami. Aktualnie analizuję Laravel, który robi furrorę od jakichś dwóch lat. I w nim nie rozumiem jednej rzeczy. Podobnie jak i tam, chciałbym aby dostęp do klas frameworka był jak najprostszy, czyli, mimo używania namespaców, by do tych podstawowych klas (jak App, Input, Form) dostęp był jedynie poprzez użycie samej nazwy klasy, np:
Laravel to osiągnął. Po długiej analizie, widzę, że robi to poprzez funkcję php class_alias, np. mamy taki array w configu aplikacji:
I ten array jest użyty do zbudowania aliasów. Klasa 'App' zaczyna się w ten sposób:
I teraz to do czego nie mogę dojść, to to, że przecież ta klasa mieści się w katalogu: vendor\laravel\framework\src\Illuminate\Support\Facades\App.php Czyli katalog jest inny, niż wskazywałby na to namespace. W jaki sposób to działa, że mimo wszystko jest załadowana właściwa klasa? Analiza całego kodu chyba mi z tydzień zajmie, a może ktoś wie... Szukałem w całym projekcie funkcji __autoload oraz spl_autoload_register ale to wszystko jest strasznie zawiłe. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Autoloader jest użyty z Composer.
Zerknij w vendor/composer/autoload_psr4.php Tam będziesz miał ustalone namespace. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 79 Dołączył: 16.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
O, dzięki, szczerze mówiąc nie spodziewałem się odpowiedzi:)
Ale widzę, że to jest dużo bardziej skomplikowane, niż na początku sądziłem... np. po co jest plik autoload_classmap.php w katalogu vendor/composer - gdzie, jak widzę, jest właściwie każda klasa używana w projekcie, zarówno klasy z samego frameworka jak i projektu (z katalogu App) - no to po co są namespacy z dokładną ścieżką, jak i tak mamy to mapowanie każdej klasy do ścieżki... Aha - i w tym pliku vendor/composer/autoload_psr4.php jest napisane "// autoload_psr4.php @generated by Composer" - jak się zmusza composera by nam dodał tam nowy alias dla namespaca? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
composer dump-autoload
To polecenie aktualizuje Autoloader o nowe wpisy. Poczytaj lepiej o namespace i PSR-4 i PSR-0 to Ci może rozjaśni. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 79 Dołączył: 16.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
OK, dzięki!
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 20:49 |