• 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

VPS Starter Arubacloud
0 głosów
1,627 wizyt
pytanie zadane 14 maja 2017 w PHP przez Benek Szeryf (92,390 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 (92,390 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 (92,390 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ź 229 wizyt
pytanie zadane 20 listopada 2016 w PHP przez Karol Wiczling Początkujący (430 p.)
0 głosów
4 odpowiedzi 354 wizyt
pytanie zadane 22 marca 2018 w PHP przez Mebya Użytkownik (700 p.)
+3 głosów
3 odpowiedzi 1,125 wizyt

92,973 zapytań

141,937 odpowiedzi

321,175 komentarzy

62,301 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...