Как сделать для запросов вида:
index.php POST act=add&user_id=1¶m1=data1&..¶mN=dataN
Грамотный роутинг? Что здесь будет контроллер, что модель? потому что могут быть и такие строки:
index.php POST act=delete&user_id=1¶m1=data1&..¶mN=dataN
index.php POST act=selection&user_id=1¶m1=data1&..¶mN=dataN
мне GET вида:controller/model/param1/param2/param3 не нужен.
Ладно, вот смотри когда я смотрел как это работает, делал примерно так
index.php
<?php
function Scan($dir)
{
if (!preg_match("/\.$/",$dir)){
if (is_file($dir)) require_once($dir);
else {
$d=opendir("$dir");
while(false !== ($file = readdir($d)))
Scan("$dir/$file");
closedir($d);
}
}
}
require_once('config.php');
Scan("./classes");
Scan("./controllers");
Scan("./models");
$bootstrap = new Bootstrap;
$controller = $bootstrap->createController();
if($controller) {
$controller->executeAction();
}
bootstrap class
<?php
/**
*
*/
class Bootstrap
{
private $controller;
private $action;
private $request;
function __construct()
{
// разбираешь url
$this->request = explode('/', mb_substr($_SERVER["REQUEST_URI"], 1));
// смотришь полученные параметры на наличие home page
if($this->request[0] == '') {
$this->controller = 'home';
}
else {
$this->controller = $this->request[0];
}
if(!isset($this->request[1]) || $this->request[1] == '') {
$this->action = 'index';
} else {
$this->action = $this->request[1];
}
}
public function createController() {
// проверяешь на наличие того или иного контроллера
if(class_exists($this->controller) ) {
$parents = class_parents($this->controller);
if( in_array("Controller", $parents) ) {
// здесь уже смотришь на наличие действий
if( method_exists($this->controller, $this->action ) ) {
return new $this->controller($this->action, $this->request);
}
else {
echo " <h1>Method does not exist </h1> ";
return;
}
} else {
echo "<h1>Base controller not found</h1>";
return;
}
} else {
echo "<h1>Controller class does not found</h1>";
return;
}
}
}
И выходит по два параметра к примеру: user/login, controller:action
А action уже сам разбирается, что он будет вытаскивать
На github есть полный код, только без комментариев разбирать сложно https://github.com/KaukinDima/php/tree/master/mvc/MVCmyCRUD
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости