Вот и "дорос" до понимания паттернов (шаблонов). Интуитивно уже давно к этому шел и наконец прозрел. Идея хорошо изложена в этом видео:
Теперь разберусь в рабочем примере, взятом с YOUTUBE:
<html>
<head>
<style>
#login-controls {
margin: 0 auto;
border: 1px solid #ccc;
padding: 50px;
width: 300px;
}
.error-text{
color: #f00;
}
</style>
</head>
<body>
<div id="login-controls">
<h2>Login</h2>
<form method="POST" action="index.php">
<p>Username:<br />
<input type="text" name="user" />
</p>
<p>Password:<br />
<input type="password" name="pass" />
</p>
<input type="submit" name="op" value="login" />
</form>
</div>
</body>
</html> Здесь все просто: обычный HTML-код для отображения формы. Заполненные поля передаются файлу index.php:
<?php
require_once('user_controller.inc.php');
require_once('user_model.inc.php');
@$op = $_REQUEST['op'];
$user_controller = new UserController();
switch($op){
case 'login':
$username = $_POST['user'];
$password = $_POST['pass'];
if ($user_controller -> login($username,$password)){
header("Location:main.php");
}else header("Location:login.php?err=1");
break;
case 'logout':
$user_controller -> logout();
header("Location:login.php");
break;
default:
header("Location:login.php");
break;
}
?>
В файле index.php:
Предусмотрены три варианта. Если переменная "op" имеет значение:
Разбираюсь с контроллером (обьект UserController) и смотрю файл user_controller.inc.php:
<?php
class UserController {
function UserController() //constructor
{
}
function create($username,$password,$email){
}
function login($username,$password){
if ($this->authenticate($username,$password)){
session_start();
$user = new UserModel($username);
$_SESSION['user']=$user;
return true;
}else{
return false;
}
}
static function authenticate($u,$p){
$authentic=false;
if($u=='admin' && $p =='admin') $authentic=true;
return $authentic;
}
function logout(){
session_start();
session_destroy();
}
}
?>
Класс содержит 4 метода:
Вернусь к рассмотрению файла index.php. Если метод login() контроллера $user_controller вернет значение "true", то загрузится страница main.php.
Файл main.php:
<?php
require_once('user_model.inc.php');
session_start();
if(!isset($_SESSION['user'])){
header("Location:login.php");
}else{
$user = $_SESSION['user'];
}
?>
<html>
<head>
</head>
<body>
<p>
You are now logged in <?php print $user->get_username()?>
...this is the main.
<a href="index.php?op=logout">Logout</a>
</p>
</body>
</html>
Чисто для демонстрации работы с данными через класс UserModel в файле main.php выводится имя пользоателя через метод get_username().
И, наконец, некоторый демо-вариант файла user_model.inc.php:
<?php
class UserModel{
private $username;
function UserModel($username){
$this->username = $username;
}
function get_username(){
return $this->username;
}
function set_username($username){
$this->username = $username;
}
}
?>
Для модели MVC (model-view-controller) назначение файлов такое:
В этом примере 2 точки входа: файлы index.php и login.php
Разбор примера закончен.
Использованные источники: