Autor Zpráva
jik
Profil
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
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
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');
    }
}
?>
A teď nevím, co s tím. Předpokládám, že evalmath.class.php patří do adresáře components, ale hlásí to"Class 'EvalMath' not found".
aDAm
Profil
jen bokem, proč tam máš startup metodu když v ní nic neděláš?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0