IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: autoload funkce

Aktivity
Avatar
Adam Matis
Člen
Avatar
Adam Matis:8.8.2018 18:02

Ahoj potřeboval bych poradit mám problém vymyslet jak načítat třídy, které jsou rozdělený po různých složkách.

Zkusil jsem: Napadlo mě v indexu vytvořit nějaké pole, které by obsahovalo všechny názvy adresářů a pak jednotlive adresáře procházet a hledat daný soubor. Existuje nějaká efektivnější varianta ?

Chci docílit: Vytvářím svou vlastní jednoduchou mvc strukturu, kde část webu, která používá svou vlastní šablonu než zbytek webu např adminsitrace,login bude ve vlastním adresáři s vlastní šablonou.

 
Odpovědět
8.8.2018 18:02
Avatar
Odpovídá na Adam Matis
Martin Konečný (pavelco1998):8.8.2018 18:14

Ahoj,
pokud dodržuješ určitý standard, pak by namespace mělo odpovídat adresářové struktuře. Tedy např.

namespace App\Model\Services\Users\UserManager

by mělo být ve složce

app/Model/Services/Users/UserManager.php

Pokud to máš poházené různě a nechceš vymýšlet vlastní řešení, zkus:
https://github.com/…robot-loader

Pokud chceš opravdu sám, pak si myslím, že tvé řešení je dobré. Jen by bylo fajn si to nějak cachovat, abys při každém požadavku nemusel procházet všechny adresáře a hledat :D

Nahoru Odpovědět
8.8.2018 18:14
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Adam Matis
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Adam Matis:8.8.2018 18:53

Děkuji za odpověď určitý standart dodržuji resp Mám to rozděleno jako
App/
nazev_adresaře/

  • Model
  • View
  • Controller

Namespaces zatím nevyužívám resp kdybych je dodělal
např

<?php
namespace app\chyba\Controller;
class ChybaController {...}

Jak by pak měl ta autoload funkce vypadat aby tu třídu s daným namespacem dokazala najít
Ja jí mam prozatím udělanou takto

function autoload($className) {
    $file = $className . '.php';
    if(file_exists($file)) {
        require_once $file;
    }
}
 
Nahoru Odpovědět
8.8.2018 18:53
Avatar
Lasvit
Člen
Avatar
Lasvit:9.8.2018 10:38

Od toho slouží composer který stejně nakonec budeš potřebovat. Takže dodržuj PSR-4 a nainstaluj si tam https://getcomposer.org/. Nejlepší řešení.

 
Nahoru Odpovědět
9.8.2018 10:38
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:13.8.2018 14:06

V proměnné className dostane funkce vždy kompletní název třídy i s jmenným prostorem. Tzn. pokud máš namespace app\chyba\Con­troller a třídu ChybaController tak při volání autoload funkce máš v proměnné className máš "\app\chyba\Con­troller\Chyba­Controller". Teoreticky stačí převrátit lomítka a udělat require_once() na tu cestu.

Pokud by namespace neodpovídal adresářům tak už si tu proměnou musíš nějak rozparsovat podle lomítek a udělat si k tomu nějakou logiku.

Jinak souhlasím s ostatními, že je dobré se držet standardů ušetří ti to spoustu problémů.

Editováno 13.8.2018 14:07
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
13.8.2018 14:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.