Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Marián 30. 01. 2018, 14:00:53
-
Ahojte, jak správně vytvořit objekt kontroleru když používám i namespace a název kontroleru je v poli?
$object = new \Controllers\ucfirst($this->url[0])();
Není na to nějaká php funce?
-
takhle se to nedela.
https://symfony.com/doc/current/routing.html
-
Díky ale na to jsem se ale neptal.
-
Stačí mít plně kvalifikovaný název ve stringu:
$className = '\Foo\Bar\MyClass';
$instance = new $className();
-
Stačí mít plně kvalifikovaný název ve stringu:
$className = '\Foo\Bar\MyClass';
$instance = new $className();
To je rada jako prase, když budu znát název třídy, tak proč bych ji cpal ještě do proměnné a nezavolal tu třídu rovnou?
$instance = new \Foo\Bar\MyClass();
-
To je rada jako prase, když budu znát název třídy, tak proč bych ji cpal ještě do proměnné a nezavolal tu třídu rovnou?
$instance = new \Foo\Bar\MyClass();
Tohle mi pripomnelo http://www.lamer.cz/quote/5639
Tip: Tu promennou si muzes dynamicky naplnit
-
Myslíš tak, ty rozumbrado?
$className = '\Controllers\'.ucfirst($this->url[0]);
$instance = new $className();
-
Myslíš tak, ty rozumbrado?
$className = '\Controllers\'.ucfirst($this->url[0]);
$instance = new $className();
Ano, přesně tak. Pokud nevidíte rozdíl mezi tímhle a Vaším řešením v prvním postu, tak tady asi nemá cenu dál ztrácet čas s obvious trollem.
-
Vydím, že chytrolínů je tu plná p*del, ale aby si to někdo zkusil, to ne.. jen urážky a blbý kecy.....
-
Vydím, že chytrolínů je tu plná p*del, ale aby si to někdo zkusil, to ne.. jen urážky a blbý kecy.....
https://exploited.cz/otazky
-
Boze, nez clovek zacne urazet, tak by si mel uvedomit, ze lidi, kterych se pta netusi, co ma za problem.
Ano, ten kod by mohl teoreticky fungovat. Proc nefunguje, to z toho vaseho popisu nemuzeme zjistit. Nevime hlavne nasledujici:
- Co je promenna $this->url?
- Co vrati volani $this-url[0]
- Je vytvoreny retezec opravdu spravny pro tu tridu, kterou chcete vytvorit?
- Pada vam to s nejakou chybout?
Dokud tohle nesepisete, nema cenu ani diskuzi zacinat.
-
Stačí mít plně kvalifikovaný název ve stringu:
$className = '\Foo\Bar\MyClass';
$instance = new $className();
Tohle je správná odpověď. Naplňte si
$className
a pak můžete udělat tu instanci. Pokud zavoláte konstruktor přímo, musíte už předem vědět, kterou třídu budete instancovat, což právě nevíte. Pokud chcete instancovat třídu v závislosti na datech například z url, musíte použít proměnnou.
Budete u toho muset taky ošetřit, když v ní bude jméno neexistující třídy anebo když by tam bylo jméno jiné třídy než controlleru. Mimo jiné to má význam pro bezpečnost.