Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Netbeans - include path
Forum PHP.pl > Forum > Kontrola i zarządzanie projektami
Szymciosek
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
kayman
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
Szymciosek
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.
kayman
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
Szymciosek
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.
kayman
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
Szymciosek
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...
kayman
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


Szymciosek
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.
sazian
a takie coś
  1. set_include_path(implode(PATH_SEPARATOR, array(
  2. realpath('../abs/mvc'),//lub dla pewności pełna ścieżka
  3. )));
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.