Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Problem z załadowaniem klasy za pomocą composera

Napisany przez: trifek 13.09.2018, 20:11:13

Witajcie,
Mam taki układ katalogów:
- moja aplikacja
-- apps
--- Backend
--- Core
---- Core\Config
---- Core\Drivers (Db.php)
---- Core\Main
--- Frontend

Mój plik composer.json:

  1.  
  2. {
  3. "autoload": {
  4. "psr-4": {
  5. "Core\\": "apps/Core/",
  6. "Web\\": "apps/Frontend",
  7. "Cms\\": "apps/Backend"
  8. }
  9. },
  10. "require": {
  11. "php": ">=7.0",
  12. "phpmailer/phpmailer": "~6.0",
  13. "monolog/monolog": "~1.23",
  14. "mpdf/mpdf": "~7.0",
  15. "twig/twig": "~2.5"
  16. },
  17. "config": {
  18. "vendor-dir": "apps/vendor"
  19. }
  20. }
  21.  


W momencie gdy chcę wywołać w pliku moja aplikacja\secret\index.php kod:
  1. require_once ("../apps/vendor/autoload.php");
  2. use Core\Drivers;
  3. use Core\Main;
  4. $bl = new Core\Drivers\Db();
  5.  
  6.  


Plik Db.php wygląda następująco:

  1. namespace Core\Drivers;
  2.  
  3.  
  4. class Db
  5. {
  6.  
  7. ...
  8.  
  9. }
  10.  


otrzymuję błąd:
Fatal error: Uncaught Error: Class 'Core\Drivers\Db' not found in

Dlaczego?

Napisany przez: nospor 14.09.2018, 08:32:41

A odpaliles
composer dump-autoload
?

Napisany przez: trifek 14.09.2018, 09:21:48

tak. Korzystam z phpstorm i klikam tam install/update. Wykonałem też polecenie z konsoli i nie pomogło.

Nie wie. czy to ma znaczenie, ale vendor mam tutaj: apps/vendor (composer, mpdf, autoload.php etc).
Pliki composera: composer.json, composer.phar, composer.lock są w głównym katalogu aplikacji

Napisany przez: trzczy 14.09.2018, 10:44:25

  1. require_once ("../apps/vendor/autoload.php");

ta ścieżka jest prawidłowa?

Jak włączysz obsługę błędów, to w przypadku nieprawidłowej ścieżki pokaże się błąd.

Napisany przez: nospor 14.09.2018, 11:12:16

@trzczy jakby require nie znalazlo pliku, to bysmy nie widzieli bledu
Fatal error: Uncaught Error: Class 'Core\Drivers\Db' not found in

tylko FATAL o braku pliku

Napisany przez: trifek 14.09.2018, 11:22:46

dokładnie, ścieżka w required jest poprawna smile.gif

Napisany przez: trzczy 14.09.2018, 12:28:06

  1. ...
  2. "autoload": {
  3. "psr-4": {
  4. "Core\\": "apps/Core/Drivers/",
  5. "Core\\": "../apps/Core/",
  6. "Core\\": "../apps/Core/Drivers/",
  7. "Web\\": "apps/Frontend",
  8. "Cms\\": "apps/Backend"
  9. }
  10. },
  11. ...

Napisany przez: viking 14.09.2018, 16:10:33

A tak na marginesie. Tutaj akurat pewnie jest zła ścieżka podana. Natomiast jak robisz:

Kod
use Core\Drivers;


To nie:
Kod
$bl = new Core\Drivers\Db();


Tylko:
Kod
$bl = new Drivers\Db();


Gdybyś NS użył to już miałbyś błąd wyszukiwania klasy.

Napisany przez: Pyton_000 15.09.2018, 06:54:56

Albo po prostu:

Kod
$bl = new \Core\Drivers\Db();


Albo
Kod
use Core\Drivers\Db;
$bl = new Db();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)