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/" } }