try/catch funguje podivne ve FormSubmitted
- muflix
- Člen | 92
Ahoj, mám
presenters/AdminPresenter.php
public function vlozNovinkuFormSubmitted(Nette\Application\UI\Form $form)
{
try {
$this->novinky->vlozNovinku(array(
'perex' => $form->values->perex,
'text' => $form->values->text,
'id_uzivatele' => $this->getUser()->getId()
));
$this->flashMessage('Novinka přidána.');
$this->redirect('this');
} catch(Exception $e) {
$form->addError('Při vkládání se vyskytla chyba: '.$e);
}
}
models/Novinky.php
public function vlozNovinku($arr)
{
$this->db->query('INSERT INTO [novinky]', $arr);
}
pokuď do SQL INSERTU vložim uměle chybu tak se to chová správně a přes flash zprávičky se do stránky vypíše SQL syntax error.. pokuď ale vše spravim, tak se mi vypíše novinka se vložila v pořádku (což je pravda, do databáze se údaj vloží) ale taky se mi vypíše
Při vkládání se vyskytla chyba: exception 'Nette\Application\AbortException' in C:\web\www\stranka.cz\libs\Nette\Application\UI\Presenter.php:640 Stack trace: #0 C:\web\www\stranka.cz\libs\Nette\Application\UI\Presenter.php(624): Nette\Application\UI\Presenter->terminate() #1 C:\web\www\stranka.cz\libs\Nette\Application\UI\Presenter.php(686): Nette\Application\UI\Presenter->sendResponse(Object(Nette\Application\Responses\RedirectResponse)) #2 C:\web\www\stranka.cz\libs\Nette\Application\UI\PresenterComponent.php(405): Nette\Application\UI\Presenter->redirectUrl('http://stranka.cz...', NULL) #3 C:\web\www\stranka.cz\app\presenters\AdminPresenter.php(43): Nette\Application\UI\PresenterComponent->redirect('this') #4 [internal function]: AdminPresenter->vlozNovinkuFormSubmitted(Object(Nette\Application\UI\Form)) #5 C:\web\www\stranka.cz\libs\Nette\common\Callback.php(101): call_user_func_array(Array, Array) #6 C:\web\www\stranka.cz\libs\Nette\common\ObjectMixin.php(60): Nette\Callback->invokeArgs(Array) #7 C:\web\www\stranka.cz\libs\Nette\common\Object.php(81): Nette\ObjectMixin::call(Object(Nette\Application\UI\Form), 'onSuccess', Array) #8 C:\web\www\stranka.cz\libs\Nette\Forms\Form.php(429): Nette\Object->__call('onSuccess', Array) #9 C:\web\www\stranka.cz\libs\Nette\Forms\Form.php(429): Nette\Application\UI\Form->onSuccess(Object(Nette\Application\UI\Form)) #10 C:\web\www\stranka.cz\libs\Nette\Application\UI\Form.php(137): Nette\Forms\Form->fireEvents() #11 C:\web\www\stranka.cz\libs\Nette\Application\UI\Presenter.php(317): Nette\Application\UI\Form->signalReceived('submit') #12 C:\web\www\stranka.cz\libs\Nette\Application\UI\Presenter.php(193): Nette\Application\UI\Presenter->processSignal() #13 C:\web\www\stranka.cz\libs\Nette\Application\Application.php(131): Nette\Application\UI\Presenter->run(Object(Nette\Application\Request)) #14 C:\web\www\stranka.cz\app\bootstrap.php(41): Nette\Application\Application->run() #15 C:\web\www\stranka.cz\www\index.php(16): require('C:\web\www\ixne...') #16 {main}
nevíte v čem je problém ? děkuji
- Jan Endel
- Člen | 1016
Osobně ještě považuju odchytávání čisté Exception a její výpis přímo uživateli za jednu z největších prasáren. Pokud nastane problém, na který je aplikace stavěná (třeba pokus registrace uživatele se stejným uživatelským jménem), tak by se měla odchytávat PDOException a ještě kontrolovat její chybový kód, a pokud se neshoduje s předpokládáným throwovat chybu znova. Protože pak klidně může dojít k situaci:
Při vkládání se vyskytla chyba: SQLSTATE[28000] [1045] Access denied for user 'user'@'localhost' (using password: YES)
Což typického uživatele nezajíma a škodícího uživatele navede k tomu, že ví pod jakým názvem se aplikace připojuje k databázi, celé je to fuj!