Преглед на файлове

Added action with separate IHandler implementation

Lukas Angerer преди 4 години
родител
ревизия
1df4c77eed
променени са 4 файла, в които са добавени 32 реда и са изтрити 2 реда
  1. 4 1
      src/lib/HandlerAction.php
  2. 6 0
      src/lib/IHandler.php
  3. 21 0
      src/routes/form2.php
  4. 1 1
      src/templates/pages/form.php

+ 4 - 1
src/lib/HandlerAction.php

@@ -12,6 +12,9 @@ class HandlerAction extends Action
 
     public function execute(): void
     {
-        $this->handler->execute();
+        $this->handler->execute($this);
     }
+
+    public function render(): void
+    {}
 }

+ 6 - 0
src/lib/IHandler.php

@@ -0,0 +1,6 @@
+<?php
+
+interface IHandler
+{
+    public function execute(Action $action);
+}

+ 21 - 0
src/routes/form2.php

@@ -0,0 +1,21 @@
+<?php
+
+class FormHandler implements IHandler
+{
+    public function execute(Action $action)
+    {
+        $pageData = array();
+        if ($action->method === "POST")
+        {
+            $pageData["name"] = "<pre>" . json_encode($_POST) . "</pre>";
+        }
+
+        $page = new Page("form");
+        $page->title = "A Form with a Handler";
+        $page->render($pageData);
+    }
+}
+
+Router::register(new HandlerAction("/form2", "GET", new FormHandler()));
+
+Router::register(new HandlerAction("/form2", "POST", new FormHandler()));

+ 1 - 1
src/templates/pages/form.php

@@ -6,7 +6,7 @@
 -->
 <?= $context->template("navigation") ?>
 
-<form action="/form" method="POST">
+<form action="<?= $this->requestUri ?>" method="POST">
   <label for="fname">First name:</label><br>
   <input type="text" id="fname" name="fname" value="John"><br>
   <label for="lname">Last name:</label><br>