Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] autoloader MVC
ghastblood
post 8.06.2015, 11:22:29
Post #1





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jak metoda __autoload załadować controler model i view z odzielnych katalogów
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Pyton_000
post 8.06.2015, 11:39:06
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
pasman
post 8.06.2015, 11:57:55
Post #3





Grupa: Zarejestrowani
Postów: 70
Pomógł: 4
Dołączył: 16.03.2012

Ostrzeżenie: (0%)
-----


z tym że __autoload jest zaplanowane do usunięcia.
zalecane jest użycie spl_autoload_register()
Go to the top of the page
+Quote Post
Pyton_000
post 8.06.2015, 12:10:58
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


@pasman na prawdę? Gdzie to wyczytałeś? Bo w dokumentacji nic na ten temat nie piszą.
Go to the top of the page
+Quote Post
ghastblood
post 8.06.2015, 15:06:41
Post #5





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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żć

Ten post edytował ghastblood 8.06.2015, 15:07:08
Go to the top of the page
+Quote Post
Pyton_000
post 8.06.2015, 15:12:02
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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();

Ten post edytował Pyton_000 8.06.2015, 15:13:04
Go to the top of the page
+Quote Post
ghastblood
post 8.06.2015, 15:26:08
Post #7





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


$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();
Go to the top of the page
+Quote Post
Xelah
post 8.06.2015, 17:09:30
Post #8





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

Ostrzeżenie: (0%)
-----


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ś.

Ten post edytował Xelah 8.06.2015, 17:11:15
Go to the top of the page
+Quote Post
Pyton_000
post 8.06.2015, 17:29:28
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Od ostrzeżenia do statusu deprecated jeszcze dużo wody minie, więc do podstawowych rzeczy wystarcza.

Dodaj \ na początku namespacze czyli \App
Go to the top of the page
+Quote Post
com
post 8.06.2015, 18:49:18
Post #10





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


__autoload() nawet pojawi się w php7 wiec bez obaw o jego używanie smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 10.07.2025 - 11:02