Php router -- autoload controllera

Upogonio sam ovaj router , ovo je samo za učenje.

Interesira me best practice, kako automatski napraviti autoload controllera?

Imamo ovako

$router = new \Bramus\Router\Router();
$router->get(’/test’, ‘test@index’);
$router->run();

Treba loadati controller test i pozvati metodu index, dakle ono što frameworci rade automatski.

Imam neke svoje zamisli, ali interesiraju me i druga mišljenja.

Za autolaod pogledaj spl_autolaod tj spl_autoload_register

http://php.net/manual/en/function.spl-autoload.php
http://php.net/manual/en/function.spl-autoload-register.php

A taj ruter ce sam pozvati metodu, negdje u ovom bloku: https://github.com/bramus/router/blob/e1a2b6da8e555fd5344706900861375852d22bea/src/Bramus/Router/Router.php#L391

Jasno je to meni, ali prije toga treba rucno napraviti include controllera.

Moze se skemijat da se u bazi drzi pattern i onda dinamicki includa controller.

Samo Composer PSR-4 autoloading.

2 Likeova

Pa netreba rucno napraviti, to ce napraviti funkcija koju regstriras.
Ukoliko ne registriras niti jednu, ondak ce defaultno to uraditi spl_autoload, koja ce:

By default it checks all include paths to contain filenames built up by the lowercase class name appended by the filename extensions .inc and .php.

evo primjera, u example.php nigdje rucno ne includa “controllers/HomeController.php”:

Još jedan parametar što treba koristiti composer autoload je da Symfony od verzije 4 i Zend od verzije 3 (obe aktuelne) koriste composer autoload standard isključivo. U prethodnim verzijama su korišteni i drugi (dodatni) načini autoload-a (Zend u Module.php fajlu, Symfony kroz ClassLoader.php).

2 Likeova

Rijeseno…

Ubo nekoliko seminara na udemy, izmedju ostalog php mvc from scratch gdje je objasnjen i composer i autoload, tu sam imao rupe.

Za jedan sat seminara, ako se pise i code i sve radi kako treba, treba otprilike 2-3sata rada.:innocent::innocent:
Sve ovisi sa kojom verzijom autor radi itd.

Super. Svakoga dan u sakom pogledu napredujemo :slight_smile:
Mozes li sa nama podjeliti kako si rjesio problem?

Composer, autoload i namespace.

Namespace i autoload sam do sada zanemarivao.

:+1: Poprilično sam siguran da ti se otvara novi realm PHP-a.

I nadopuna:
composer, git, i phpunit.

1 Like

Da…
Git znam, a php unit krenuo sa seminarom. Drugi po redu na udemy.

1 Like

Ja lupim pretragu i izbaci mi cijenu od $125 za kurs.
Aj’ mislim se baš da ga stavim u wishlist, medjutim kad sam se ulogov’o spusti se cijena za 77% tj. na $29. :open_mouth:

Tako ima je sa svim tutorialima :smiley: Dignu cijenu u nebo, i odmah kao neki offer naprave 80% popusta koji traje samo jos par sati, a u biti traje zauvijek :smiley:

Sad mi Udemy posla mejl sa nepristojnom ponudom no. 2:

1 Like

Sad se moraš zabrinuti, da te netko ne prati.
Paranoja, paranoja …:smile::smile::smile::smile:

Pa ne, sve je ok.
Juče sam se logov’o i stavio na wishlist kurs.
Danas ga nude po nešto jeftinijoj cijeni a ja još uvijek tvrdim pazar. :relaxed:

@tpojka

ako imam psr4 autoload npr. ovako:

      "autoload": {
         "psr-4": {
             "Core\\": "System/",
             "App\\": "App/"
           
         }
     },

I sad u App imam tisuće klasa, da li se uvijek loadaju samo one kalse koje se koriste ili sve?

ili da ručno imam autoloader?

class Autoloader {

    private static $extension = '.php';
    private static $path = '/';

    public static function Load($path) {
        if (isset($path) && !empty($path)) {
            self::$path = $path . '/';

            spl_autoload_register(
                    function ($file) {
                $file = str_replace('\\', DIRECTORY_SEPARATOR, $file);
                echo $file."\n";
                require_once Autoloader::$path . $file . Autoloader::$extension;
            }
            );
        } else {
            return false;
        }
    }
}

u ovom drugom primjeru mi se loada smao ono što se koristi, clasa controller, bl class i modeli koji se koriste.

Samo one koje se koriste.
Kad prvi put instanciras ili ako je staticka kad prvi put pozoves neku metodu.

composer isto koristi autoloader ako je to pitanje.

Pregledom nekol’ko artikala, evo izdvajam ovaj: