<?php $_shouldextend[1]=1; ?>

<?php $this->startSection("content"); ?>
 <div>
 <h1>Demo für <?php echo \htmlentities($name??'', ENT_QUOTES, 'UTF-8', false); ?></h1>
 <p>Kurze Übersicht, wie die Arbeit mit dem Router und der Blade View-Engine funktioniert.</p>

 <h2>Router</h2>
 <p>Der Router nimmt den Request entgegen und zerlegt ihn in die einzelnen Teile der URI. Wichtig ist hier vor
 allem der Pfad und der Querystring.</p>
 <p>Wenn der Pfad in der Routenkonfiguration (<code>\$config</code> Array aus der Datei
 <code>routes/web.php</code>) gefunden wird, lädt der Router die angegebene Klasse.</p>

 <h3>Funktionsweise</h3>
 <p>Im vorliegenden Beispiel sehen Sie diese Seite ... </p>
 <ol>
 <li>weil der Pfad in der Routenkonfiguration gefunden wurde</li>
 <li>und dort <span class="code">'DemoController@howto'</span> hinterlegt ist</li>
 <li>und im Ordner <span class="code">controllers/</span> die Datei <code class="language-php">DemoController.php</code> gefunden werden konnte
 </li>
 <li>und mit ihr ein Objekt des Typs <span class="code">DemoController</span> instanziiert werden konnte</li>
 <li>und dieses Objekt die Funktion (Action) <span class="code">howto()</span> ausgeführt hat</li>
 </ol>
 <p>Sie sehen: da muss einiges stimmen und vieles davon ist Konvention.</p>
 <h3>Querystrings und Pfadsegmente</h3>
 <p>Die Actions in den Controller-Klassen sollen per Konvention immer ein <span class="code">RequestData</span> Objekt
 entgegennehmen. Beispiel: <code class="language-php">howto(RequestData \$rd)</code></p>
 <p>Dieses RequestData Objekt wird durch den Router befüllt, wenn Daten in der URL extrahiert werden konnten.</p>
 <p>Daten finden sich URLs...</p>

 <ul>
 <li>
 <p>
 <strong>im Querystring</strong><br>Beispiel: rufen Sie diese mit
 <code class="language-http"><?php echo \htmlentities(strtolower(explode('/',$_SERVER["SERVER_PROTOCOL"])[0])??'', ENT_QUOTES, 'UTF-8', false); ?>://<?php echo \htmlentities($_SERVER["HTTP_HOST"]??'', ENT_QUOTES, 'UTF-8', false); ?>/demo?<strong>bgcolor=fefbd8&name=Remmy</strong></code>
 auf, werden <span class="language-php">bgcolor</span> und <code class="language-php">name</code> mitsamt Werten als Query Array
 <code class="language-php">$rd->query</code>) übergeben
 </p>
 </li>
 </ul>

 <p>Probieren Sie es aus ;)</p>
 <?php if(count($rd->args)): ?>
 <p><strong>Argumente dieses Aufrufs:</strong></p>

 <?php $__empty_1 = true; foreach($rd->args as $a): $__empty_1 = false; ?>
 <div><span class="code"><?php echo \htmlentities($a??'', ENT_QUOTES, 'UTF-8', false); ?></span></div>
 <?php endforeach; if ($__empty_1): ?>
 <p>Keine weiteren Argumente im Request</p>
 <?php endif; ?>
 <?php endif; ?>
 <?php if(count($rd->query)): ?>
 <p><strong>Daten aus der Query dieses Aufrufs:</strong></p>
 <pre><code class="language-php">
 <?php $__empty_1 = true; foreach($rd->query as $k => $v): $__empty_1 = false; ?>
 $rd->query['<?php echo \htmlentities($k??'', ENT_QUOTES, 'UTF-8', false); ?>']=<?php echo \htmlentities($v??'', ENT_QUOTES, 'UTF-8', false); ?>

 <?php endforeach; if ($__empty_1): ?>
 <p>Keine Querydaten</p>
 <?php endif; ?>
 </code></pre>
 <?php endif; ?>
 <h2>Blade</h2>
 <p>Blade <a href="https://github.com/EFTEC/BladeOne#install-pick-one-of-the-next-one">muss installiert</a> sein.
 Die Installation ist bereits geschehen und die Bibliothek liegt unter /vendor.
 </p>
 <h3>Daten übergeben und View rendern</h3>
 <p>Bei der Verwendung der View-Engine gelten einige Konventionen:
 Die Dateien müssen <code class="language-php">&lt;viewname&gt;.blade.php</code> heißen und im Ordner <code class="language-php">views</code> liegen.
 </p>
 <p>Sie können der View dann Daten mitgeben, indem Sie alle Daten in ein Array schreiben und dieses dann
 übergeben.</p>
 <p>Beispiel:</p>
 <pre><code class="language-php">
 view("viewtest",
 array(
 "texts"=>$textArray,
 "persona"=>$persona,
 "rd"=>$rd
 )); // öffnet ../views/viewtest.blade.php
 </code></pre>
 </div>
<?php $this->stopSection(); ?>

<?php $this->startSection("cssextra"); ?>
 <style>
 body > div {background-color: <?php echo \htmlentities('#' . $bgcolor??'', ENT_QUOTES, 'UTF-8', false); ?>; }
 </style>
<?php $this->stopSection(); ?>

<?php $this->startSection("jsextra"); ?>
 <script src="/js/highlight.min.js"></script><script>hljs.highlightAll();</script>
<?php $this->stopSection(); ?>
<?php if (isset($_shouldextend[1])) { echo $this->runChild(".layouts.layout"); } ?>