• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Autoładowanie klas za pomocą PSR-4

Object Storage Arubacloud
0 głosów
1,607 wizyt
pytanie zadane 14 maja 2017 w PHP przez Benek Szeryf (91,050 p.)

W głównym katalogu projektu posiadam klasę src/File.php, która obsługuje pliki. Niestety w tym pliku zdefiniowałem także klasę wyjątku, którą chcę teraz przenieść do osobnego pliku, dodatkowo umieszczając go w podkatalogu Exception/. Pierwotny wygląd pliku src/File.php jest następujący:

<?php

namespace Nazwisko;

class File
{
 ...
}

class FileException extends \Exception
{
}

Po rozbiciu na dwa osobne pliki i umieszczeniu ich w tym samym katalogu src/ wszystko jest w porządku. Plik src/File.php ma postać:

<?php

namespace Nazwisko;

use Nazwisko\FileException;

class File
{
 ...
}

zaś src/FileException.php:

<?php

namespace Nazwisko;

class FileException extends \Exception
{
}

i podkreślam raz jeszcze, że ten kod działa poprawnie. Gdy jednak przeniosę plik src/FileException.php do lokalizacji src/Exception/FileException.php i zmodyfikuję oba pliki w następujący sposób:

<?php

namespace Nazwisko;

use Nazwisko\Exception\FileException;

class File
{
 ...
}
<?php

namespace Nazwisko;
//namespace Nazwisko\Exception; // również nie działa

class FileException extends \Exception
{
}

to kod nie działa, wypisując komunikat, że klasa nie została znaleziona. W pliku composer.json mam następujące powiązanie:

    "autoload": {
        "psr-4": {
            "Nazwisko\\": "src/"
        }
    }

 

1 odpowiedź

+1 głos
odpowiedź 16 maja 2017 przez Assasz Nałogowiec (30,460 p.)
wybrane 17 maja 2017 przez Benek
 
Najlepsza
"autoload": {
    "psr-4": {
        "Nazwisko\\": "src/",
        "Nazwisko\\Exception\\":"src/exception/"
    }
}

Dodajesz do klasy namespace Nazwisko\Exception, a potem ją importujesz tak jak poprzednio.

komentarz 16 maja 2017 przez Benek Szeryf (91,050 p.)

Próbowałem, nie działa. Wykonałem composer dump-autoload.

1
komentarz 16 maja 2017 przez Assasz Nałogowiec (30,460 p.)
Zanim napisałem tego posta zrobiłem identycznie. Zadziałało. Może problem tkwi gdzie indziej.
komentarz 17 maja 2017 przez Benek Szeryf (91,050 p.)
Tak, problem leżał gdzie indziej, mój błąd. Nie uwzględniłem wszystkich ścieżek. Po poprawkach wszystko wróciło do normy.

Podobne pytania

0 głosów
1 odpowiedź 219 wizyt
pytanie zadane 20 listopada 2016 w PHP przez Karol Wiczling Początkujący (430 p.)
0 głosów
4 odpowiedzi 328 wizyt
pytanie zadane 22 marca 2018 w PHP przez Mebya Użytkownik (700 p.)
+3 głosów
3 odpowiedzi 997 wizyt

92,580 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...