そのため、私は独自の MVC フレームワークを調査して構築することに取り組んできましたが、それを実装する 6 つの異なる方法に遭遇し続けています。はい、Zend などを使用できることはわかっていますが、他の人のフレームワークを使用するだけでなく、フレームワークがどのように機能するかを本当に学びたいと思っています。
これが私のインデックスファイルの単純なバージョンです:
if(isset($_GET['url']))
{
$url = strtolower($_GET['url']);
}
else
{
$url = 'home';
}
switch($url) // Select the controller based on the GET var in the url
{
case 'home': include(ROOT_DIR . 'app/controllers/homeCon.php'); // This page has the link to the DB test page on it
break;
case 'dbtest': include(ROOT_DIR . 'app/controllers/dbTestCon.php');
break;
default: include(ROOT_DIR . 'app/views/error404View.php');
}
これは、私の dbTestCon.php コントローラーの単純なバージョンです。
if(isset($_POST['dbSubBtn']))
{
$model = new DbTestModel();
if($_POST['firstName'] != '' && $_POST['lastName'] != '')
{
$model->submitToDb($_POST['firstName'], $_POST['lastName'])
$model->displayPage('goodToGo');
}
else
{
$model->displayPage('noInput');
}
}
else
{
$model->displayPage('normal');
}
ここに私のDbTestModel.phpがあります:
class DbTestModel
{
public function displayPage($version)
{
$title = "DB Test Page";
$themeStylesheetPath = 'public/css/cssStyles.css';
include(ROOT_DIR . 'app/views/headerView.php');
include(ROOT_DIR . 'app/views/dbTestView.php');
switch($version)
{
case 'goodToGo':
include(ROOT_DIR . 'app/views/dbTestSuccessView.php');
break;
case 'noInput':
include(ROOT_DIR . 'app/views/noInputView.php');
break;
}
include(ROOT_DIR . 'app/views/footerView.php');
}
public function submitToDb($firstName, $lastName)
{
try
{
$db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = $db->prepare('insert into dbtest(firstName, lastName) values(:firstName, :lastName)');
$sql->bindParam(':firstName', $firstName);
$sql->bindParam(':lastName', $lastName);
$sql->execute();
$db = null;
}
catch(PDOException $e)
{
echo "It seems there was an error. Please refresh your browser and try again. " . $e->getMessage();
}
}
}
そして、ここに私の dbTestView.php があります:
<form name="dbTestForm" id="dbTestForm" method="POST" action="dbtest">
<label for="firstName">First Name</label>
<input type="text" name="firstName" id="firstName" />
<label for="lastName">Last Name</label>
<input type="text" name="lastName" id="lastName" />
<input type="submit" name="dbSubBtn" id="dbSubBtn" value="Submit to DB" />
</form>
この単純な例は私のテスト環境で動作しますが、次のプロジェクトで使用を開始し、途中でフレームワークに根本的な問題があり、最初からやり直す必要があることに気付くのではないかと心配しています。助けやアドバイスをありがとう。