Autor | Zpráva | ||
---|---|---|---|
jik Profil |
#1 · Zasláno: 30. 6. 2014, 15:11:41
Zdravím,
v Nette mě čeká vyčíslování výrazů přes eval, tak jsem se dal (poprvé) na výjimky. Mám takovýto kód: <?php use Nette\Diagnostics\Debugger; use \Exception; class TestPresenter extends BasePresenter { public function startup(){ parent::startup(); } public function renderDefault() { try { $a=0; $c = 1/($a); } catch (Exception $e) { $report = "výjimka při dělení"; $this->redirect('Error:App', $report); } } } ?> Mám představu, že by to mělo proběhnout a skončit na ErrorPresenteru, který by mě měl cosi oznámit. Ale místo toho dostávám jenom hlášení "Division by zero", tedy výjimka zachycena není a prostě se zastaví běh. |
||
Micruss Profil |
jestli používáš namespace tak musíš použít zpětné lomítko (\Exception $e)
a jinak bych ještě zkusil mrknout na toto |
||
Jan Tvrdík Profil |
#3 · Zasláno: 30. 6. 2014, 20:47:20
jik:
• Dělení nulou nevyvolává v PHP výjimku. • Použít eval na vyhodnocení výrazu je blbost, lépe je použít třeba github.com/symfony/expression-language nebo si napsat vlastnoručně něco podobného.
• Při importu třídy nebo jmenného prostoru pomocí use je zbytečné uvádět na začátku zpětné lomítko.
• Metoda startup by měla být protected .
• Na error presenter nelze přesměrovat, protože na něj nevede žádné URL. • K předávání hlášek na jiný presenter je lepší použít flash message. |
||
jik Profil |
#4 · Zasláno: 1. 7. 2014, 09:21:00
Děkuji,
Jan Tvrdík: „Dělení nulou nevyvolává v PHP výjimku.“ Tak to mi uniklo. Našel jsem evalmath.class.php a napsal toto: <?php use Nette\Diagnostics\Debugger; use \EvalMath; class TestPresenter extends BasePresenter { protected function startup(){ parent::startup(); } public function renderDefault() { $m = new EvalMath; $m->supress_errors = true; $this->template->result = $m->evaluate('2+2'); } } ?> |
||
aDAm Profil |
#5 · Zasláno: 1. 7. 2014, 09:26:14
jen bokem, proč tam máš startup metodu když v ní nic neděláš?
|
||
Časová prodleva: 10 let
|
0