protected function addActionToCurrent() { $this->action = $this->current->getAction($this->request->name); if ($this->action === null) { $this->action = new Action(); $this->current->actions[$this->request->name] = $this->action; } $this->action->name = $this->request->name; $this->action->description = $this->request->description; $this->action->addToMenu = $this->request->addToMenu; $this->action->securityLevel = $this->request->securityLevel; $this->action->next = $this->request->next; $this->action->nextItem = $this->request->nextItem; }
/** * Rahmen zum Ausführen einer Funktion. Konkrete Ausführeung wird * von abstrakter Methode executeAction ausgeführt * @param $request * @return Response * @throws Exception */ public function execute($request) { // Der Response wird direkt am Anfang erzeugt und auch in der Application-Klasse // hinterlegt. Das muss aus Gründen der Abwärtskompatibilität sein. In den Controller // Methiden wird oft auf Application::currentResponse zurückgegriffen. Das muss an // dieser Stelle also gefüllt sein. Logging::info("Ausführen von [{$this->request->module}:{$this->request->action}]"); Profiler::startSection($this->request->module . '.' . $this->request->action); $this->request = $request; $this->response = new Response(); Application::getInstance()->setResponse($this->response); $this->currentAction = $this->module->getAction($this->request->action); // Abbrechen, wenn Aktion nicht gefunden werden konnte if ($this->currentAction === null) { throw new \DomainException("Aktion '{$this->request->action}' in Modul '{$this->request->module}' nicht gefunden"); } else { // Verhindern, dass von einem Angreifer eine beliebige Seite aufgerufen werden // kann $this->request->view = null; // Response mit den Standard-Daten füllen $this->response->setContent($this->currentAction->getDefaultNext($this)); $result = $this->innerExecute(); if ($result !== null) { $this->response = $result; } // Jetzt kann sich unter Umständen der View geändert haben if ($this->request->view !== null) { Logging::warning('anderen View laden'); $this->response->setContent($this->module->loadView($this->request->view, $this)); } // Überschreiben der eigentlichen Aktion durch eine, die bei der Ausführung der Funktion // gesetzt wurde if ($this->request->action !== $this->currentAction->name) { Logging::warning('Andere Action ausführen'); $this->response->setContent($this->module->getAction($this->request->action)); } Profiler::endSection($this->request->module . '.' . $this->request->action); return $this->response; } }