N O W L O A D I N G . . .
今年に入ってからコロナについては注視していたが、やはりこうなったか。
という感じ。
中国は「コロナをやっつけた」状態になっているようだが、他国はパニック。
おまけに中国ときたら「マスク外交」を始める始末。
落ち着いたら「進む中国離れ」の状態になるような。
それよりも、ヨーロッパ(特にEU加盟国)が心配。
想像以上にやられている。
さてさて、オレオレフレームワーク。
とりあえず大枠の完成に向け、少々の手直しをする。
このままではディレクトリにアクセスできてしまうので、ディレクトリをリダイレクトの対象とする。
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?params=$1 [QSA,L]
</IfModule>
コメントアウトして対応。
configディレクトリにconfig.phpを作成。
内容を以下のようにした。
<?php
/*
開始ページ
*/
define('STARTUP_PAGE','login');
/*
クラス自動ロード対象ディレクトリ
コントローラ
モデル
データクラス
基本クラス
*/
define('AUTOLOAD_DIRECTRY',
[
'CONTROLLER_DIRECTRY' => './controllers',
'MODEL_DIRECTRY' => './models',
'DATA_DIRECTRY' => './datas',
'BASE_DIRECTRY' => './bases'
]
);
// テンプレートファイルディレクトリ
define('TEMPLATE_DIRECTRY','templates/');
/*
テンプレートコンパイルデータディレクトリ
Smartyのコンパイルに使用されるため、書込み権限が必要。
*/
define('TEMPLATE_COMPILE_DIRECTRY','tmp/smarty');
/*
その他クラス
その他ライブラリ等を読み込む場合に設定する。
*/
define('OTHRER_CLASS',
['Smarty' => './libralies/smarty/Smarty.php']
);
AutoLoader.phpでは、Config.phpの読み込み、自動クラスロードの対象ディレクトリをコンストラクタで行うように修正。
<?php
/**
* AutoLoader
* 自動ロードクラス
*/
class AutoLoader
{
/**
* directries
* 対象ディレクトリ。
*
* @var mixed
*/
protected $directries;
/**
* __construct
* コンストラクタ
*
* @return void
*/
function __construct() {
// 設定ファイル
require_once('./config/config.php');
// 対象ディレクトリ
foreach ( AUTOLOAD_DIRECTRY as $key => $value )
{
$this->addTargetDirectry($value);
}
// 自動ロード設定
$this->registAutoload();
}
/**
* __destruct
* デストラクタ
*
* @return void
*/
function __destruct() {
unset($this->directries);
}
/**
* registAutoload
* autoLoadメソッド登録。
*
* @return void
*/
private function registAutoload()
{
spl_autoload_register(array($this, 'autoLoad'));
}
/**
* addTargetDirectry
* 対象ディレクトリ追加。
*
* @param mixed $dir
* @return void
*/
private function addTargetDirectry($dir)
{
$this->directries[] = $dir;
}
/**
* autoLoad
* 自動クラスロード処理。
* @param mixed $className
* @return void
*/
private function autoLoad($className)
{
// ディレクトリ
foreach ($this->directries as $dir) {
$file = $dir . '/' . $className . '.php';
if (is_readable($file))
{
require_once $file;
return;
}
}
// その他ファイル
foreach ( OTHRER_CLASS as $key => $value )
{
// 呼び出しクラスと定義クラスの一致判定
if ( $className !== $key )
{
continue;
}
if (is_readable($value))
{
require_once $value;
return;
}
}
}
}
index.phpでは、AutoLoader.phpの読み込み、パラメタがない場合にはConfig.phpに設定した開始ページを表示するように修正。
コントローラが無い等のエラー時には、ExceptionContorollerを処理する。
<?php
// AutoLoader
require_once('./loader/AutoLoader.php');
$autoLoader = new AutoLoader();
// Get url
if ( isset($_GET['params']) === true )
{
$params = explode('/', $_GET['params']);
} else {
$params = [STARTUP_PAGE];
}
// Get Controllername and parameters.
// To lower case
$controller = ucfirst(array_shift($params));
// Create controller instance
$controller = $controller . 'Controller';
try
{
// Create instance of controller
$class = new $controller;
}
catch (Throwable $t)
{
$class = new ExceptionController();
$params = $t;
}
catch (Exception $e)
{
$class = new ExceptionController();
$params = $e;
}
// Call run method
$ret = $class->run($params);
んむ。
こんなもんかな。
データベースへの接続やら、そんなのは自前で組んでくれたらそれでいいだろうし。
このオレオレフレームワークを使ってブログ書こうかな。