Я не решаюсь ответить на этот вопрос только из-за религиозного рвения, которое его окружает.
Чтобы получить действительно хорошее представление о проблемах, лежащих в основе общих концепций, см. Эта страница обсуждения в вики Это страница обсуждения вокруг статьи MVC вики.
Вот эмпирическое правило, которому я хотел бы следовать (кстати, я использую CodeIgniter, и это звучит так же, как и вы):
«Вид» не должен иметь практически никакой логики. Это должен быть только HTML (в веб-мире) с заправленным PHP, который просто выводит переменные. В вашем примере вы бы разбили форму на собственное представление, и контроллер определил, был ли загружен или нет.
Мне нравится смотреть на это так: представление не должно иметь понятия, откуда поступают данные или куда они идут. Модель должна быть независимой. Контроллер извлекает данные из модели и предоставляет их представлению, а также получает данные из представления и фильтрует их для модели.
Вот быстрый и грязный (непроверенный - но он должен понять суть) пример:
Theapp.php (Контроллер приложения)
class Theapp extends Controller
{
var $_authenticated;
var $_user;
var $_menu; // array of menus
function __construct()
{
session_start();
if (isset($_SESSION['authenticated']) && $_SESSION['authenticated'])
{
$this->_authenticated = $_SESSION['authenticated']; // or some such thing
$this->_user = $_SESSION['user'];
}
$this->_menu = array("Logout", "Help", "More");
parent::__construct();
$this->loadView("welcome"); // loads primary welcome view - but not necessarily a complete "html" page
}
function index()
{
if (!$this->_authenticated)
$this->loadView("loginform");
else
{
$viewData['menu'] = $this->_menu;
$viewData['user'] = $this->_user;
$this->loadView("menu", $viewData);
}
}
function login()
{
/* code to authenticate user */
}
function Logout() { /* code to process Logout menu selection */ }
function Help() { /* code to process Help menu selection */ }
function More() { /* code to process More menu selection */ }
}
welcome.php
<h1> Welcome to this quick and dirty app!</h1>
All sorts of good HTML, javascript, etc would be put in here!
LoginForm.php
<form action"/Theapp/login" method="post">
User: <input id='user' name='user'>
Pass: <input id='pass' name='pass' type='password'>
<input type='submit'>
</form>
menu.php
Hi <?= $user ?>!<br>
Here's your menu<br>
<? foreach ($menu as $option) { ?>
<div class='menuOption'><a href='/Theapp/<?=$option?>'><?=$option?></a></div>
<? } ?>
Надеюсь, это поможет.