Tak jak w temacie. Chciałbym się tego dowiedzieć. Przygotowałem wstępny kod aby zobrazować tok rozumowania. Proszę o ocenę i jeżeli pojawią się jakieś uwagi to było by fajnie gdyby pojawiło się również uzasadnienie. Zakładamy, że jest włączone przepisywanie adresów url w pliku .htaccess i wszystko trafia do router'a. Zakładamy, że jest to sklep odzieżowy i np pojawia się taki adres url w pasku /szukaj/kalesony/.
<?php
function autoloadClass($ClassName) //wiadomo, automatycznie ładujemy klasy
{
if(file_exists("php/model/$ClassName.php"))
{
require "php/model/$ClassName.php";
}
else if(file_exists("php/view/$ClassName.php"))
{
require "php/view/$ClassName.php";
}
else if(file_exists("php/controler/$ClassName.php"))
{
require "php/controler/$ClassName.php";
}
}
spl_autoload_register('autoloadClass');
class Router
{
public $ModelName;
public $ViewName;
public $ControlerName;
public $Parameter;
function __construct() //tutaj parsujemy adres url i wyodrębniamy akcję
{
//jakieś działania na ciągach znaków
$this->ModelName = $JakasZmiennaPrzechowujacaNazwe;
$this->ViewName = $JakasZmiennaPrzechowujacaNazwe;
$this->ControlerName = $JakasZmiennaPrzechowujacaNazwe;
$this->Parameter = $TuPewnieJakasTablica
}
}
class SearchByItemModel //klasa modelu
{
private $Item;
public function SetItem($Item)
{
$this->Item = $Item;
}
public function FindItemInDataBase()
{
//łączenie z bazą danych, pobieranie danych itp cała logika tu pracuje
return $JakasZmiennaZapewneTablica;
}
}
class SearchByItemView
{
private $ItemFinder;
function __construct($ItemFinder)
{
$this->ItemFinder = $ItemFinder;
}
function Render()
{
//tutaj wyświetlane jest wszystko co potrzebne, tutaj jest bezpośredni dostęp do modelu
}
}
class SearchByItemControler
{
private $Model;
function __construct($Model)
{
$this->Model = $Model;
}
function Search($Item)
{
$this->Model->SetItem($Item);
}
}
//tworzymy instancje naszych obiektów;
$router = new Router();
$model = new $router->ModelName();
$controler = new $router->ControlerName($model);
$parameter = $router->Parameter;
$controler->Search($Parameter);
$view = new SearchByItemView($model);
$view->render();
?>