Very Light Frame work is "Typoon" Ver.20200223.
とりあえず、ライブラリの実装を進めてますが、バリデーターが沼だ…
で、簡易MVPパターンで組んでたけど、ADRパターンを知ったので、POSTでActionのモードを投げてソースリストを分岐で読み込む部分を追加して、Actionのソースを分割できる風に実装した
その部分のみをブログで公開しますよ。進捗は進んでます
[Typoon.php]
<?php
/**
* Very light framework is the "Typoon".
* Ver.20200223.
* @author kubohisa at pdbrec.com.
*/
/**
* Typoon Seting.
*/
class TypoonReg
{
static $SessionName = "Hie4Ewxz";
static $DomeinName = "localhost";
static $HashDummyA = "esfdf4gesg";
static $HashDummyB = "erg6gefbdr";
}
// Requires.
require_once('../lib/typoon/stdio.phl'); // Smarty3.
require_once('../lib/smarty/Smarty.class.php'); // Smarty3.
/**
* Start Typoon IPL.
*/
// null.
function sanitizer($arr) {
if (is_array($arr) ){
return array_map('sanitizer', $arr);
}
return str_replace("\0", "", $arr);
}
$_POST = sanitizer($_POST);
$_COOKIE = sanitizer($_COOKIE);
$_SERVER = sanitizer($_SERVER);
$_GET = array(); // Delete gets.
// Domain check.
if ($_SERVER['SERVER_NAME'] != TypoonReg::$DomeinName) {
TypoonSTDIO::ErrorCode(500);
exit;
}
// Https check.
// テスト環境ではhttpなので外してます
/* if (empty($_SERVER['HTTPS'])) {
TypoonSTDIO::ErrorCode(500);
exit;
}
*/
// md Setting.
mb_language("Japanese");
mb_internal_encoding("UTF-8");
// セッションIDリセット
session_name(TypoonReg::$SessionName);
session_start();
session_regenerate_id(true);
// Get Get.
$UrlGet = preg_split("/\//", $_SERVER["REQUEST_URI"]);
array_shift($UrlGet);
// Trim get.
foreach ($UrlGet as $key => $value){
$UrlGet[$key] = TypoonStrings::Trim($value);
}
// プレゼンテーターがあるか?
if ($UrlGet['0'] == "") {
$UrlGet['0'] = "index";
}
if (! empty($_POST['mode'])) {
$UrlGet['0'] = $UrlGet['0']."@".$_POST['mode'];
}
if (! preg_match('/\A[a-zA-Z0-9\-\_\@]++\z/i', $UrlGet['0'])) {
TypoonSTDIO::ErrorCode(404);
exit;
}
if (! file_exists("presenter/".$UrlGet['0'].".present")) {
TypoonSTDIO::ErrorCode(404);
exit;
}
$PresentName = array_shift($UrlGet);
// Seting Smarty.
$smarty = new Smarty();
$smarty->loadFilter('variable', 'htmlspecialchars');
// 実行
require_once("presenter/".$PresentName.".present");
exit;
?>