Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] autoloader MVC
Forum PHP.pl > Forum > Przedszkole
ghastblood
Jak metoda __autoload załadować controler model i view z odzielnych katalogów
Pyton_000
Użyć sobie composer jako autoloader i iść w konwencje psr-4 czyli namespace do ładowania klas.

Jeśli jednak upierasz się przy tym to jako argument __autoload() dostajesz nazwę klasy którą skrypt próbuje załadować. Albo na podstawie nazwy klasy parsujesz ścieżkę albo np. tworzysz tablicę klas z ich miejscem na dysku.
pasman
z tym że __autoload jest zaplanowane do usunięcia.
zalecane jest użycie spl_autoload_register()
Pyton_000
@pasman na prawdę? Gdzie to wyczytałeś? Bo w dokumentacji nic na ten temat nie piszą.
ghastblood
dobra composer tylko że jak z tego użyć.

struktura katalogów to

-app
--controller
---home.php
--model
---home.php
--view
---home
----index.twig


jak zrobie classmap app/controler, app/model to zwróci mi tylko ścieżkę do modelu

jak używać namespace bo nie mogę tego rozgryżć
Pyton_000
W pliku composer.json w głównym kat. coś takiego:
Kod
{
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}


W pliku np. controller/home.php:
  1. namespace App\Controller;

w modelu:
  1. namespace App\Model;


Zmień nazwy katalogów na Wiekie litery (Controller,Model), app może zostać.

Potem robisz
Kod
composer dump-autoload

i w pliku który odpalasz np. index.php robisz np:
  1. require '../vendor/autoload.php


Potem jeśli chcesz się odwołać do kontrolera Home dajesz
new App\Controller\Home();

lub użycie
use App\Controller\Home;
i new Home();
ghastblood
$page = new App\Controller\home();

Fatal error: Class 'App\Core\App\Controller\home'

Plik index odwołuje się do $app = new App\Core\Application();

a w klasie Application chce odwołać się do App\Controller\Home();
Xelah
Cytat(Pyton_000 @ 8.06.2015, 13:10:58 ) *
@pasman na prawdę? Gdzie to wyczytałeś? Bo w dokumentacji nic na ten temat nie piszą.


Zaplanowane nie jest, ale ostrzegają, że może być usunięte.

Cytat
spl_autoload_register() provides a more flexible alternative for autoloading classes. For this reason, using __autoload() is discouraged and may be deprecated or removed in the future.


@ghastblood: Pokaż dokładnie co masz plikach php. Chodzi o namespace. Bo ewidentnie coś namieszałeś.
Pyton_000
Od ostrzeżenia do statusu deprecated jeszcze dużo wody minie, więc do podstawowych rzeczy wystarcza.

Dodaj \ na początku namespacze czyli \App
com
__autoload() nawet pojawi się w php7 wiec bez obaw o jego używanie smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.