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

composer autoload php

VPS Starter Arubacloud
0 głosów
1,046 wizyt
pytanie zadane 30 grudnia 2018 w PHP przez niezalogowany

dzien dobry,

 

jak rozumiem aby korzystac z mozliwosci automatycznego ładowania plików .php w porjekcie  skorzystac trzeba ze skladni w composer.json?

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

 

1 odpowiedź

+1 głos
odpowiedź 30 grudnia 2018 przez HaKIM Szeryf (87,590 p.)

Tak. Dokładniej mówiąc - trzeba napisać odpowiedni config w JSON.

Twój jest nieodpowiedni. Powinno być:

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

https://getcomposer.org/doc/04-schema.md

No i nie zapomnij o:

require __DIR__ . '/vendor/autoload.php';

 

komentarz 31 grudnia 2018 przez niezalogowany
require __DIR__ . '/vendor/autoload.php';

ta linijka musi byc w kazdym pliku?
komentarz 31 grudnia 2018 przez HaKIM Szeryf (87,590 p.)
Nie musi. :p

W PHP przeważnie mamy front-controller i to tam znajduje się ta linijka.

Przykład: https://github.com/HaKIMus/slim-template/blob/master/public/index.php#L7
komentarz 31 grudnia 2018 przez niezalogowany
edycja 31 grudnia 2018

kurcze to dziwne, nie dziala mi

Fatal error: Uncaught Error: Class 'nowaKlasa' in /home/usi2/www/index.php:5

to tresc composer.json

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

index.php

<?php

require __DIR__ . '/vendor/autoload.php';

use src\klasowa;

$zm = new nowaKlasa();

echo $zm->zmienna;

echo "index.php <br/>";

Natomiast w katalogu "src" mam plik functions.php a w nim

<?php
namespace klasowa{

class nowaKlasa{

	public $zmienna = "Hello";
}

}

 

Co robie źle? O czymś zapomnialem?

 

oczywiscie zrobilem : 

composer dump-autoload
i dostalem:

Generated autoload files containing 0 classes

komentarz 31 grudnia 2018 przez HaKIM Szeryf (87,590 p.)
{
  "autoload": {
    "files": ["src/functions.php"],
    "psr-4": {
      "MyApp\\": "src/"
    }
  }
}

Tylko nie wiem czy opyla się mieć autoloadera na funkcje... On robi po prostu require na ten plik a to sam możesz zrobić.

komentarz 1 stycznia 2019 przez niezalogowany
edycja 1 stycznia 2019
zedytowalem poprzedni post, juz mam klase

chyba chodzi o skrukture katalogow, czy uzywajac composera w ten sposób powyższy muszę zachować jakąś strukturę katalogów? ponieważ majac w katalogu src pliki z klasami nie sa one ładowane niestety
komentarz 1 stycznia 2019 przez HaKIM Szeryf (87,590 p.)

no bo musisz miec namespace ustalony w composer.json do tego.

czyli

namespace MyApp;

class Joljol2019 {}

a w index np

require __DIR__ . '/vendor/autoload.php';

use MyApp\Joljol2019;

$siemaelo320 = new Joljol2019();

no i nie zapomnij o composer dump-autoload

poza tym ziomeczku jest sylwek! Balowac trza! lecimy lecimy uuuu makarena usune te odpowiedz pozniej 

komentarz 1 stycznia 2019 przez niezalogowany

szczerze mowiac nie interesuje mnie sylwester

 

tak mam

index.php

<?php
require(__DIR__ . '/vendor/autoload.php');


$obj = new App\Nowa\nowa();

echo "hello index.php";

composer.json

{
"autoload": {
    "psr-4": {
      "App\\": "src"
    }
  }
}

plik klasy

<?php

namespace App\Nowa;

class nowa{
	public $nowa = 'jakas zmienna z klasy';
}

Blad:

Uncaught Error: Class 'App\Nowa\nowa' not found

Autodump pokazuje : Generated autoload files containing 0 classes

komentarz 1 stycznia 2019 przez HaKIM Szeryf (87,590 p.)
Zamiast

$obj = new App\Nowa\nowa();

zrób

$obj = new App\Nowa();

No i nie

namespace App\Nowa;

tylko App; Chyba, że class nowa leży w podfolderze src/Nowa.

Oraz nazwy klas rozpoczynamy z dużej litery.

class Nowa {...}

print $obj->nowa;

Te public $nowa  to nie zmienna a właściwość klasy. Tak tylko :P
komentarz 1 stycznia 2019 przez niezalogowany
taak wlasnie ogarnalem co robilem źle, otóż nie wzialem pod uwage że jak mam plik w folderze to w namespace musze go uwzglednic!
dziekuje za porady i cierpliwosc, dopiero zglebiam tajniki przestreni nazw i composera, dzieki wielkie i dobrego nowego roku :)
komentarz 1 stycznia 2019 przez HaKIM Szeryf (87,590 p.)

uuuuuuuuuuuuuuuuu makarena i wzajemnie! yes

Podobne pytania

0 głosów
2 odpowiedzi 188 wizyt
pytanie zadane 24 sierpnia 2020 w PHP przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
3 odpowiedzi 999 wizyt
pytanie zadane 27 sierpnia 2020 w PHP przez molik Użytkownik (950 p.)
0 głosów
0 odpowiedzi 302 wizyt
pytanie zadane 8 stycznia 2019 w PHP przez kasia101 Początkujący (290 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...