Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Netbeans - include path
Szymciosek
post 1.04.2013, 23:05:42
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Witam,
posiadam taki autoloader:
  1. <?php
  2.  
  3. function __autoload($className)
  4. {
  5. $className = ltrim($className, '\\');
  6. $fileName = '';
  7. $namespace = '';
  8.  
  9. if ($lastNsPos = strrpos($className, '\\'))
  10. {
  11. $namespace = substr($className, 0, $lastNsPos);
  12. $className = substr($className, $lastNsPos + 1);
  13. $fileName= str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
  14. }
  15.  
  16. $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
  17.  
  18. if (file_exists($fileName))
  19. include $fileName;
  20. else echo 'Class ' . $fileName . ' does not exist';
  21. }


Na poziomie całego projektu YYY (Source files) działa wyśmienicie lecz za chiny nie mogę dostać się do plików, które dodam poprzez PHP INCLUDE PATH (properties projektu YYY).

...

Stworzyłem nowy projekt XXX z taką strukturą:
- Source files (domyślnie)
-- package
--- log/Logs.php -> namespace package\log;
--- Connect.php -> namespace package;
--- Validation.php -> namespace package;

Próbuję zrobić:
use package\log\Logs;
Logs::error('message');

Lecz otrzymuję błąd, że nie znajduje pliku logs.php...
Domyślam się, że problem leży po stronie samego autoloadera, ale jak to zmienić?

Dodam jeszcze, że sam autoloader leży w YYY/Source files/src/cms/autoloader.php, a ładowany jest w miejscu YYY/Source files/index.php
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
kayman
post 2.04.2013, 02:02:29
Post #2





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


dla mnie jest jakiś błąd w założeniu

jeżeli -> log/Logs.php to pełna ścieżka do pliku i Logs jest nazwą klasy to autoloader powinien

- sprawdzić czy plik istnieje pod podaną ścieżka (niezależnie od zagnieżdżenia)

- dołączyć kod klasy


czyli autoloader powinien mieć info o pełnej ścieżce do pliku

Ten post edytował kayman 2.04.2013, 02:36:03
Go to the top of the page
+Quote Post
Szymciosek
post 2.04.2013, 12:44:45
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


No tak, ale weź pod uwagę to, że Logs.php nie leży w całym katalogu Source files tylko ja to includuje w properties podając mu ścieżkę do projektu z package...
Więc w ostateczności powinno chyba to inaczej wyglądać.

Dlatego pytam jak to dobrze zrobić żeby includowany projekt współpracował z projektem, który go includuje...

Najlepiej jakiś przykład i wtedy zobaczę co jest nie tak.

Albo nawet jak bez autoloadera z Source files dostać się do Include path i tamtych plików?
Żeby to mimo wszystko jakoś automatycznie stamtąd pobierał.

Dodam, że pracuję lokalnie z wamp serverem.

Ten post edytował Szymciosek 2.04.2013, 12:32:21
Go to the top of the page
+Quote Post
kayman
post 2.04.2013, 12:56:49
Post #4





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


twój autoloader obecnie szuka pliku w bieżącym folderze (index.php) bo z zewnątrz nie dostaje info w którym folderze ma szukac

dlatego pliki co są w folderze z index.php są includowane a reszta nie będzie znaleziona

musisz jakoś przemycić info o ścieżce
Go to the top of the page
+Quote Post
Szymciosek
post 2.04.2013, 14:01:14
Post #5





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Co jest trochę bez sensu takie "przemycenie", bo za każdym razem, gdy zmienię położenie projektu, który chcę includować (tym samym na serwerze itd) ścieżka będzie inna.

Wg. mnie to powinno jakoś lepiej być zorganizowane chyba... ale nie wiem jak.
Go to the top of the page
+Quote Post
kayman
post 2.04.2013, 15:19:58
Post #6





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


przecież ciebie interesuje ścieżka w stosunku do folderu zawierającego index.php to jak będzie inna

poza tym ścieżkę można przemycić na 1000 sposobów nawet w nazwie klasy

mojaklasa_com -> com/
mojaklasa_mod -> mod/
mojaklasa_log -> log/
mojaklasa -> folder z index.php

do tego explode i swith i śmiga i jest w miarę czytelne -> tak myślę smile.gif
Go to the top of the page
+Quote Post
Szymciosek
post 2.04.2013, 15:52:07
Post #7





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Albo ja nadal nie rozumiesz albo Ty myślisz, że wszystkie foldery będę miał w tym samym folderze lub podfolderach obok index.php, który ładuje autoloader.

Fizycznie pliki na dysku są rozmieszczone tak:
Projekt CMS: F:\WORK\cms\ -> tutaj index.php + inne foldery
Projekt XX: F:\WORK\xx -> tutaj jest package/log/Logs.php, package/Validation.php, package/Connect.php

Teraz w projekcie CMS ustawiam w properties > PHP Include path do projektu XX, więc wygląda to tak:
https://dl.dropbox.com/u/21239599/1-1.JPG

I teraz jak z index.php widocznego na załączonym screenie dostać się do MainController używając tylko tego?
  1. use controllers\MainController;
  2. new MainController();


Tutaj ścieżka wg Twojego przekazanie MainController - powinna być tam, gdzie jest index.php, a tak nie jest...

Ten post edytował Szymciosek 2.04.2013, 15:52:45
Go to the top of the page
+Quote Post
kayman
post 2.04.2013, 16:34:31
Post #8





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


faktycznie nie zrozumieliśmy się

popatrzyłem tu -> http://www.php.net/manual/en/language.namespaces.php i wcale nie jestem pewien czy taka deklaracja ścieżek będzie ok (może php.ini?) a nawet jeżeli struktura będzie mało czytelna

ja bym przeniósł te kontrolery do projektu i nie bawił się w takie rozwiązania


Go to the top of the page
+Quote Post
Szymciosek
post 2.04.2013, 16:36:02
Post #9





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Niby można kombinować z php.ini itd itp, ale wtedy każda zmiana ścieżki tamtego projektu = zmiana w php.ini i tak samo jest zawsze... może kiedyś jakoś do tego lepiej dojdę, ale teraz chyba przerzucę ten folder package do projektu po prostu.
Go to the top of the page
+Quote Post
sazian
post 2.04.2013, 19:58:11
Post #10





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


a takie coś
  1. set_include_path(implode(PATH_SEPARATOR, array(
  2. realpath('../abs/mvc'),//lub dla pewności pełna ścieżka
  3. )));
Go to the top of the page
+Quote Post

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: 20.06.2025 - 22:54