• 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,610 wizyt
pytanie zadane 14 maja 2017 w PHP przez Benek Szeryf (91,110 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,110 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,110 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ź 220 wizyt
pytanie zadane 20 listopada 2016 w PHP przez Karol Wiczling Początkujący (430 p.)
0 głosów
4 odpowiedzi 331 wizyt
pytanie zadane 22 marca 2018 w PHP przez Mebya Użytkownik (700 p.)
+3 głosów
3 odpowiedzi 1,005 wizyt

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 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!

...