Nastavení jednoho globálního Error presenteru pro všechny moduly
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- fary
- Člen | 155
mam v aplikaci dva moduly, namespace u nich mam
App\Modules\Api
a App\Modules\Admin
, pak mam error
presenter, ktery mam v namespace App\Presenters
, tedy mimo
moduly.
v config.neon mam toto nastaveni:
application:
errorPresenter: Error
mapping:
*: App\Modules\*\Presenters\*Presenter
aplikace mi do logu zapisuje toto: „Cannot load presenter ‚Error‘, class ‚App\Modules\Presenters\ErrorPresenter‘“.
je mi jasne, o co jde, ale rad bych se zeptal, jak zardit, abych ten globalni error presenter nemusel strkat mezi moduly? lze to v konfiguraci nejak nastavit?
- Machy8
- Člen | 59
Píšu to z hlavy, tak si tím nejsem úplně jistej. Čerpal jsem odtud. Třeba pomůže i článek od Martina Zlámala
application:
errorPresenter: Error
mapping:
*: App\Modules\*\Presenters\*Presenter
Error: App\Presenters\*Presenter
- Martk
- Člen | 652
V základním error presenteru můžeš provést forward na svůj modulový error presenter.
namespace App\Modules\Presenters;
class ErrorPresenter extends BasePresenter {
/** @var IRouter */
public $router;
public function __construct(IRouter $router) {
$this->router = $router;
}
public function actionDefault(\Exception $exception) {
$matches = $this->router->match($this->getHttpRequest());
if ($matches instanceof Request) {
$module = Nette\Application\Helpers::splitName($matches->presenterName)[0];
if ($module) {
$module = ':' . $module;
}
$this->forward("$module:Error:", [
'exception' => $exception
]);
} else {
Tracy\Debugger::exceptionHandler($exception);
}
}
}
Editoval Antik (28. 7. 2016 18:39)