Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]jak to działa że mogę tworzyć obiekt bez includowania autoloadera?
andrzejdupa
post 22.05.2016, 12:58:52
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post
com
post 22.05.2016, 13:16:24
Post #2





Grupa: Zarejestrowani
Postów: 3 032
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? wink.gif

btw zresztą ten projekt jest nie do użytku tu jest właściwa wersja https://github.com/moneyphp/money
Go to the top of the page
+Quote Post
andrzejdupa
post 22.05.2016, 13:36:27
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post
com
post 22.05.2016, 14:45:34
Post #4





Grupa: Zarejestrowani
Postów: 3 032
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


tak dokładnie, poczytaj o composer, i psr http://www.php-fig.org/ smile.gif
Go to the top of the page
+Quote Post
andrzejdupa
post 24.05.2016, 16:32:23
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


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ę)
Go to the top of the page
+Quote Post
Pyton_000
post 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 smile.gif
Go to the top of the page
+Quote Post
andrzejdupa
post 24.05.2016, 17:09:09
Post #7





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


guitar.gif
Go to the top of the page
+Quote Post
com
post 24.05.2016, 17:12:50
Post #8





Grupa: Zarejestrowani
Postów: 3 032
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


no generalnie taka jest miej więcej idea smile.gif
Go to the top of the page
+Quote Post
andrzejdupa
post 24.05.2016, 21:50:29
Post #9





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


a gdybym chciał by vendor\autoload.php wziął też composer.json z mojego projektu a nie tylko z komponentów obcych (z katalogu \vendor)?
Go to the top of the page
+Quote Post
Comandeer
post 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 wink.gif)


--------------------
Go to the top of the page
+Quote Post
andrzejdupa
post 24.05.2016, 22:09:07
Post #11





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


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ć
Go to the top of the page
+Quote Post
com
post 24.05.2016, 22:14:19
Post #12





Grupa: Zarejestrowani
Postów: 3 032
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 smile.gif
Go to the top of the page
+Quote Post
andrzejdupa
post 24.05.2016, 22:20:43
Post #13





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


po wprowadzeniu zmian w composer.json

  1. "autoload": {
  2. "psr-4": {
  3. "foo\\": "src/"
  4. }
  5. }


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
Go to the top of the page
+Quote Post
com
post 24.05.2016, 22:24:12
Post #14





Grupa: Zarejestrowani
Postów: 3 032
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


to do tego służy require wink.gif

czyli np
  1. "require": {
  2. "container-interop/container-interop": "~1.1",
  3. "league/tactician": "^1.0"
  4. }


Ten post edytował com 24.05.2016, 22:27:38
Go to the top of the page
+Quote Post
andrzejdupa
post 24.05.2016, 22:28:29
Post #15





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post
com
post 24.05.2016, 22:39:30
Post #16





Grupa: Zarejestrowani
Postów: 3 032
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 wink.gif

No to załatwiłeś to tym kodem
  1. "autoload": {
  2. "psr-4": {
  3. "foo\\": "src/"
  4. }
  5. }

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
Go to the top of the page
+Quote Post
andrzejdupa
post 24.05.2016, 22:41:25
Post #17





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 18.05.2016

Ostrzeżenie: (20%)
X----


Cytat(com @ 24.05.2016, 23:39:30 ) *
tylko w głównym pliku teraz require_once 'vendor/autoload.php';

facepalmxd.gif
Go to the top of the page
+Quote Post
Pyton_000
post 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).
Go to the top of the page
+Quote Post
viking
post 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%)
-----


Cytat(Pyton_000 @ 25.05.2016, 09:05:49 ) *
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".


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 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.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 16:43