Autor | Zpráva | ||
---|---|---|---|
lopikol Profil |
#1 · Zasláno: 19. 2. 2011, 01:49:50 · Upravil/a: lopikol
Zkouším si napsat vlastní framework. Chtěl bych jen aby uměl vyrendrovat proměné, if/else a include. Nic jiného nepotřebuji. Další věc je ta, že se takovými pokusy dá sot naučit.
Jenže jsem narazil na problém. Určitě se najde někdo, kdo zná Nette. Zde se zapisuje do Presenteru ve tvaru: Presenter: $this->template->name = 'Framework'; Template: {$name} Zajímalo by mne jak toto převedu? Jde mi o to, že sem si vytvořil: $fw->set('name', 'Framework'); function set($tag, $var, $if = NULL){....} Jde mi o to, že pokud použiju takto závorky {set()}, tak je mi to úplně jasné > přeměnit to, ale s těmi šipkami opravdu netušim. Nemohl by mi někdo poradit nějaký příklad, sepsat ..... ?? Děkuji. |
||
Alphard Profil |
#2 · Zasláno: 19. 2. 2011, 03:00:33
Zřejmě hledáte __set(). Od tvůrce objektového frameworku bych očekával, že tohle zná...
|
||
lopikol Profil |
#3 · Zasláno: 19. 2. 2011, 10:30:31
Díky za radu. Ted jen pochopit, jak mi to pomůuže používat
$this->template->name = 'Framework'; místo $fw->set('name', 'Framework'); |
||
Radek9 Profil |
#4 · Zasláno: 19. 2. 2011, 11:02:55
lopikol:
Spusť si Example #1 a zkoušej. |
||
lopikol Profil |
#5 · Zasláno: 19. 2. 2011, 13:00:43
tak už se mi povedlo docílit abych měl formát
$this->name = 'Framework'; Ted ještě přijít na to jak ta předělat na $this->template->name = 'Framework'; |
||
jsim Profil |
#6 · Zasláno: 19. 2. 2011, 13:57:10 · Upravil/a: jsim
metoda __get() ... místo $this->getTemplate() budeš psát $this->template
|
||
lopikol Profil |
#7 · Zasláno: 19. 2. 2011, 15:34:24
Mám toto:
<?php class PropertyTest { var $arrays = array(); public function __set($name, $value) { echo "Setting '$name' to '$value'\n"; $this->arrays[$name] = $value; } public function __get($name) { echo "Getting '$name'\n"; if (array_key_exists($name, $this->arrays)) { return $this->arrays[$name]; } } } <?php $obj = new PropertyTest; $obj->a = Jedna; echo $obj->a . "\n\n"; Tak at kamkoliv zkusim dát templates->, tak to prostě nefunguje a vezme to že hodnota je templates a ne Jedna |
||
Radek9 Profil |
#8 · Zasláno: 19. 2. 2011, 15:50:50 · Upravil/a: Radek9
lopikol:
Nevím, jestli to není prasárna, ale co to zkusit takhle? $obj = new PropertyTest(); $obj->template = new PropertyTest(); $obj->template->name = "Framework"; echo $obj->template->name."\r\n"; |
||
jsim Profil |
#9 · Zasláno: 19. 2. 2011, 17:22:20 · Upravil/a: jsim
<?php class Template { /** @var array */ private $variables; public function __set($name, $var){ $this->variables[$name] = $var; } public function __get($name){ return $this->variables[$name]; } } abstract class Controller { /** @var Template */ private $template; public function __get($name){ $method = 'get' . ucfirst($name); return $this->$method(); } public function getTemplate(){ return $this->template; } public function setTemplate($template){ if($template instanceof Template){ $this->template = $template; } else { throw new Exception("..."); } } } class HomepageController extends Controller { public function actionHome(){ $this->template->something = 'variable'; } } $template = new Template; $homepage = new HomepageController; $homepage->setTemplate($template); // lepsi by bylo vyresit to jinak ... tohle neni idealni $homepage->actionHome(); echo $template->something; //vypise variable mělo by to fungovat ... nejsou tam ošetřený některý věci .. s tím už si musíš pohrát sám ... |
||
lopikol Profil |
#10 · Zasláno: 19. 2. 2011, 18:44:01
Díky moc zkusím to. Mám problém s Exception.
Chtěl jsem udělat, jakmile bude nějaká chyba, tak použiju throw new Exception("...");, ale problém je v tom, že bych musel mít vše v try{vše}catch(Exception $e){výpis} To mi přijde dost na hlavu? Jak by jste to řešili vy? |
||
jsim Profil |
#11 · Zasláno: 19. 2. 2011, 18:54:50 · Upravil/a: jsim
práce s výjimkami není na hlavu .. jen musíš vědět jak a kde je zpracovat ...
jestli jsi s nimi nikdy nepracoval, zkus si najít na netu nějaký články a něco pročíst .. |
||
lopikol Profil |
#12 · Zasláno: 19. 2. 2011, 19:48:13
neřikám, že vyjímky jsou na hlavu, ale zatim jsem nepřišel na jiný způsob, než mít celý web v try{} abych mohl zachytávat vyjímky!
|
||
jsim Profil |
#13 · Zasláno: 19. 2. 2011, 20:02:25 · Upravil/a: jsim
nerozumím, jak mít celý web v try{}? prostě pokud máš někde zachytit vyjímku, tak ji zachyť ... od toho snad jsou bloky try - catch
a nepoužíval bych třídu Exception ... ta je podle mě obecná, spíš bych si buďto definoval vlastní výjimky a nebo použil už definované viz. link |
||
lopikol Profil |
#14 · Zasláno: 19. 2. 2011, 22:04:39 · Upravil/a: lopikol
Jde o to, že když chci někde použít Exception, tak to budu muset mít v try abych ji mohl zachytit. Příklad:
try { if (!mysql_connect(DB_Server, DB_User, DB_Password)){ throw new TemplateException('K databázi se nelze připojit!'); } if (!mysql_select_db(DB_Table)){ throw new TemplateException('Zadaná databáze nebyla nenalezena!'); } }catch(TemplateException $e){ $obj->set('exMessage', $e->MessageException()); } Takhle to budu muset mít všude. Toto by bylo nejlepší: if (!mysql_connect(DB_Server, DB_User, DB_Password)){ throw new TemplateException('K databázi se nelze připojit!'); } echo $this->MessageException(); |
||
lopikol Profil |
#15 · Zasláno: 20. 2. 2011, 14:09:29
Tak přes set_exception_handler() docílíte toho co jsem chtěl :) -> nemusim řešit vykreslování chyb :)
|
||
Časová prodleva: 13 let
|
0