[PHP]jak to działa że mogę tworzyć obiekt bez includowania autoloadera? |
[PHP]jak to działa że mogę tworzyć obiekt bez includowania autoloadera? |
22.05.2016, 12:58:52
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
Nie jest dla mnie jasna kwestia autoloadera.
Rozumiem zasadę działania autoloadera i przestrzeni nazw. W klasie autoloadera rejestruję przestrzenie nazw ze ścieżkami do plików następnie inkluduję autoloadera w klasie w której chcę tworzyć obiekty. Jak to się dzieje, jak w tym prostym, przykładowym projekcie, że istniejący autoloader nie inkluduje się w klasie w której tworzę obiekt Ten post edytował andrzejdupa 22.05.2016, 12:59:42 |
|
|
22.05.2016, 13:16:24
Post
#2
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
nie bardzo wiem czemu tam nie używa się psr-4, ale musisz dodać w swoim głównym pliku require z tym autoloadem nie?
btw zresztą ten projekt jest nie do użytku tu jest właściwa wersja https://github.com/moneyphp/money |
|
|
22.05.2016, 13:36:27
Post
#3
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
nie rozumiem,
a gdzie w tym projekcie jest "główny plik" https://github.com/moneyphp/money ? bo w symfony, upraszczając, rozumiem że jest ten główny plik przez który przechodzi każde żądanie i który require autoloadera, ale w tym projekcie który ja i ty podaliśmy nie widzę tego. edit: czy to może jest tak, że te projekty nie działają samodzielnie, że je się dołącza do swojego projektu jako oddzielna funkcjonalność i dołączając je muszę w swoim projekcie, w swoim pliku głównym, czy gdzieśtam dołączyć autoloadera z tego oddzielnego, dołączanego projektu. Tak to działa? ktoś mógłby mi podać hasło jakie wpisać w google by coś o tym poczytać. Ten post edytował andrzejdupa 22.05.2016, 13:56:53 |
|
|
22.05.2016, 14:45:34
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
tak dokładnie, poczytaj o composer, i psr http://www.php-fig.org/
|
|
|
24.05.2016, 16:32:23
Post
#5
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
tak to rozumiem (proszę o sprostowania):
- komponenty stosują namespace zgodny z konwencjami psr (tj nazwa namespace poza prefixem odpowiada filesystem) - każdy komponent ma swój composer.json w nim definiuje mapę autoload namespace=>dir - dzięki temu, że podąża się na konwencjami psr to nie muszę definiowac map dla każdego pliku a tylko dla folderu \src i prefixu namespace. - instalując komponent w swoim projekcie przez composer, composer dodaje automatycznie powyższą mape i umieszcza w pliku mojego projektu vendor\autoload.php - i ten plik (vendor\autoload.php) ja require w swoim pliku głównym (czyli web\app.dev w Symfony, chociaż nic tam takiego nie widzę) |
|
|
24.05.2016, 17:01:14
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Dokładnie tak
|
|
|
24.05.2016, 17:09:09
Post
#7
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
|
|
|
24.05.2016, 17:12:50
Post
#8
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
no generalnie taka jest miej więcej idea
|
|
|
24.05.2016, 21:50:29
Post
#9
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
a gdybym chciał by vendor\autoload.php wziął też composer.json z mojego projektu a nie tylko z komponentów obcych (z katalogu \vendor)?
|
|
|
24.05.2016, 21:53:04
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
https://github.com/Comandeer/SHITTY/blob/ma...ser.json#L9-L14 (chociaż poza plikiem composer.json, to polecam się nie wzorować na tym projekcie )
-------------------- ★Mój blog || Okiem krytyka★
|
|
|
24.05.2016, 22:09:07
Post
#11
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
aha, nie no, to wiem jak zdefiniować, chodziło mi o to jak dołaczyć mój comoser.json do autoload
ale rozumiem że nie trzeba się tym martwić |
|
|
24.05.2016, 22:14:19
Post
#12
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
przecież jak robisz composer install, to on czyta twój plik który zdefiniowałeś i z niego instaluje te paczki
|
|
|
24.05.2016, 22:20:43
Post
#13
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
po wprowadzeniu zmian w composer.json
muszę zrobić composer isntall by composer zaktualizował se autoloadera? robię jakąś literówkę bo mi wykrywa tego mapowania Ten post edytował andrzejdupa 24.05.2016, 22:26:38 |
|
|
24.05.2016, 22:24:12
Post
#14
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
|
|
|
24.05.2016, 22:28:29
Post
#15
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
gadamy o różnych rzeczach
mi nie chodzi o to by vendor\autoloader załadował paczki z zewnątrz (katalogu vendor) (tzn niech se ładuje, i tak tam nic nie mam, mam treningowy projekcik z 3 klasami, nie o to mi teraz chodzi) mi chodzi o to by vendor\autoloader załadował mój katalog \src z jego namespace zdefiniowane w composer.json mojego projektu (treningowego) bo nie ładuje. I nie wiem czy robię gdzieś literówkę czy trzeba jakoś specjalnie dołączyć mój composer.json by zaktualizowac autoloadera Ten post edytował andrzejdupa 24.05.2016, 22:36:51 |
|
|
24.05.2016, 22:39:30
Post
#16
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
Flow jest takie:
1. tworzysz odpowiednie katalogi które podpinasz pod autolader 2. tworzysz plik composer.json 2.1 dodajesz biblioteki do projektu, których chcesz uzyć 3. composer install 4. pracujesz sobie nad projektem, jak chcesz zaktualizować composera to robisz composer update 5. reszta w dokumentacji do poczytania No to załatwiłeś to tym kodem
tylko w głównym pliku teraz require_once 'vendor/autoload.php'; masz w katalogu composer.lock oraz vendor? spr czy sie dodało w vendor/composer/autoload_psr4.php twoje mapowanie Ten post edytował com 24.05.2016, 22:31:30 |
|
|
24.05.2016, 22:41:25
Post
#17
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.05.2016 Ostrzeżenie: (20%) |
|
|
|
25.05.2016, 08:05:49
Post
#18
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Do aktualizowania autoloadera służy
Kod composer dump-autoload Niestety ale chyba obecnie nie da się zrobić tak że będziesz miał swoją paczkę poza kat. vendor i on będzie sobie czytał z composer.json. Możesz jedynie ustawić namespace tak jak robiłeś to wcześniej na katalog src (czy jaki tam masz). |
|
|
25.05.2016, 09:57:13
Post
#19
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Niestety ale chyba obecnie nie da się zrobić tak że będziesz miał swoją paczkę poza kat. vendor i on będzie sobie czytał z composer.json. Dlaczego nie? Cytat "autoload": { "psr-0": { "Aaa_": "library/" }, "psr-4": { "Bbb\\":"library/Bbb", } }, Chyba że o czymś innym mówisz. dump-autoload -o wygeneruje pełną mapę. Jest jeszcze "include-path". -------------------- |
|
|
25.05.2016, 10:05:15
Post
#20
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
@viking jemu chodzi o to że msz sobie kat:
src/lib/my-lib/composer.json i żeby composer sobie odczytał tego json i z niego wziął mapę namespace. A nie da się tak dla pojedynczych paczek. |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 13:23 |