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
+
0
-

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
+
0
-

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
+
+2
-

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)