2010-11-25 2 views
0

Все,Динамический сайт PHP с MVC - Какой шаблон навигации?

Я изучаю пример кода, приведенный в моем классе веб-dev в качестве примера MVC (опять же для Интернета). В этом коде есть система для перехода с страницы index.php на различные контроллеры (которые затем вызывают модули Model и View), а затем обратно в index.php.

Я понимаю, как работает MVC.

То, с чем я борюсь, - это механизм навигации. У меня возникают трудности с пониманием того, как все части работают вместе.

Может ли кто-нибудь взглянуть на приведенный ниже код и рассказать мне, соответствует ли это хорошо известному методу/шаблону для динамической навигации по сайту? (Может быть, Front Controller?) Если да, то я надеюсь, что я могу сделать еще несколько исследований.

Большое спасибо!

JDelage

Index.php

<?php 
require_once("User.php"); 
session_start(); 

if (isset($_GET['action'])) 
    $action= $_GET['action']; 
else 
    $action=""; 

switch ($action) { 
case 'login': 
    require_once('Login.php'); 
    $command= new LoginControler(); 
    break; 
case 'logoff': 
    require_once('Logoff.php'); 
    $command= new LogoffControler(); 
    break; 
// Several other cases 
default: 
    require_once('Unknown.php'); 
    $command= new UnknownControle(); 
} 


$command->execute(); 
require_once('EntryMenu.php'); // Those are objects that represent both the 
// menu label and the links. 
$menu= array(
     new EntryMenu("Login", "index.php", array("action" => "logon")), 
     new EntryMenu("Logoff", "index.php", array("action" => "logoff")), 
     new EntryMenu("Write", "index.php", array("action" => "write")), 
     new EntryMenu("Read", "index.php", array("action" => "read")) 
); 

if ($command->redirect) { 
    header('Location: ' . $command->redirect); 
} else if ($command->page) { 

    include("ui/header.php"); 
    include("ui/menu.php"); 
    echo "<div class='content'>"; 
    include("ui/". $command->page); 
    echo "</div>"; 
    include("ui/footer.php"); 
} 
?> 

Controler.php

<?php 
class Controler { 
    public $page= "problem.php"; 
    function execute() {} 
} 
?> 

LogoffControler.php

<?php 
require_once('Controler.php'); 
class LogoffControler extends Controler { 

    function execute() { 
    $this->redirect= "index.php"; 
    unset($_SESSION['user']); 
    } 
} 
?> 

LoginControler.php

<?php 
require_once('LoginModel.php'); // This manages the exchanges with the user db 
require_once('Controler.php'); 

class ConnexionControle extends Controler { 
    public $page= "LoginForm.php"; 

    function execute() { 

    // More code to deal with incorrectly filled login forms 

    $login = new LoginModel(); 
    $login->loginUser($_POST['login'], $_POST['password']); 
    if ($login->userLogedIn()) { 
    $_SESSION['user']= $login->user; 
    $this->redirect= "index.php"; 
    } 

// More code to deal with invalid logins 

} 
} 
?> 

ответ

4

Я предполагаю, что вы понимаете, часть контроллера, и спрашивает о заявлениях switch..case. Я еще не встречал официального имени, но большинство инфраструктур MVC для PHP (Kohana, CakePHP, CodeIgniter, Fat Free и т. Д.) Называет это «маршрутизация». Это сопоставление URL-адреса с контроллером.

Использование переключателя 1. набор инструкций является одним из самых простых способов. Более сложные решения используют RegEx для сопоставления заранее определенных шаблонов URL-адресов, чтобы разрешить, какой контроллер вызывать, и каковы его параметры (обычно в виде «запроса»)

Другие методы включают использование перезаписи URL-адресов для получения хороших URL-адресов, такие как /articles/month/nov/article-id/3

, который в «уродливой форме URL» является:

action=articles&month=nov&article-id=3 
1

Если вы хотели бы получить Verion простой в рассекают системы MVC вы можете попробовать 1kb PHP MVC который обрабатывает все, что вы пытаетесь в намного более чистая мода. Хотя вам, возможно, придется разбить код, если вы действительно хотите его прочитать, поскольку он находится в сжатой форме.

С помощью этой системы вы просто устанавливаете контроллер в /classes/controller/ с именем somthing.php, и вы можете получить к нему доступ с URL-адреса, например http://site.com/something.

Загрузка моделей также проста и не требует никаких звонков include или require.

class Controller_Something 
{ 
public function index() 
{ 

    $model = new Model_User(); 
} 
} 
+0

Очень круто, но я не могу это прочитать. – JDelage 2010-11-25 15:51:54