| 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: 12 let
|
|||
0