Пример запроса
Поместите что-то вроде этого в ваш index.php
:
<?php
// Holds data like $baseUrl etc.
include 'config.php';
$requestUrl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$requestString = substr($requestUrl, strlen($baseUrl));
$urlParams = explode('/', $requestString);
// TODO: Consider security (see comments)
$controllerName = ucfirst(array_shift($urlParams)).'Controller';
$actionName = strtolower(array_shift($urlParams)).'Action';
// Here you should probably gather the rest as params
// Call the action
$controller = new $controllerName;
$controller->$actionName();
Действительно просто, но вы поняли идею ... (Я также не позаботился о загрузке класса контроллера, но, думаю, это можно сделать либо с помощью автозагрузки, либо вы знаете, как это сделать.)
Пример простого контроллера (controllers / login.php):
<?php
class LoginController
{
function loginAction()
{
$username = $this->request->get('username');
$password = $this->request->get('password');
$this->loadModel('users');
if ($this->users->validate($username, $password))
{
$userData = $this->users->fetch($username);
AuthStorage::save($username, $userData);
$this->redirect('secret_area');
}
else
{
$this->view->message = 'Invalid login';
$this->view->render('error');
}
}
function logoutAction()
{
if (AuthStorage::logged())
{
AuthStorage::remove();
$this->redirect('index');
}
else
{
$this->view->message = 'You are not logged in.';
$this->view->render('error');
}
}
}
Как видите, контроллер заботится о «потоке» приложения - так называемой логике приложения. Он не заботится о хранении и представлении данных. Скорее, он собирает все необходимые данные (в зависимости от текущего запроса) и присваивает их представлению ...
Обратите внимание, что это не будет работать ни с одним из известных мне фреймворков, но я уверен, что вы знаете, что должны делать функции.