Mvc Prefix
Merhabalar,
Bir kaç gündür aradığım ama bulamadığım bir konuda sizlerden yardım istiyorum.
Kendi altyapımı kurduğum bir mvc alt yapım var bu yapıya prefix
sistemi mantığını kuramadım. Yardımcı olursanız sevinirim.
Router:
<?php
class Router
{
protected $controllerPath = CONTROLLER_PATH;
protected static $routes = [];
protected static $url;
static function getAction($url, $callback, $login = "nologin")
{
self::$routes[] = ["GET", $url, $callback, $login];
}
static function postAction($url, $callback, $login = "nologin")
{
self::$routes[] = ["POST", $url, $callback, $login];
}
protected function parseUri()
{
$dirname = dirname($_SERVER['SCRIPT_NAME']);
$dirname = $dirname != '/' ? $dirname : null;
$basename = basename($_SERVER['SCRIPT_NAME']);
$request_uri = str_replace([$dirname, $basename], null, $_SERVER['REQUEST_URI']);
return $request_uri;
}
public function __construct()
{
self::$url = $this->parseUri();
}
public function run()
{
$girdi=0;
$uri = self::$url;
foreach (self::$routes as $route) {
list($method,$url, $callback) = $route;
$patterns = [
'{url}' => '([0-9a-zA-Z]+)',
'{id}' => '([0-9]+)'
];
$url = str_replace(array_keys($patterns), array_values($patterns), $url);
preg_match('@^' . $url . '$@', $uri, $data);
if ($data[0] == $uri):
array_shift($data);
if ($_SERVER['REQUEST_METHOD']== $method) {
$callback = explode("@",$callback);
if (file_exists($this->controllerPath."/{$callback[0]}.php")){
require_once $this->controllerPath."/{$callback[0]}.php";
if (class_exists($callback[0])){
if (method_exists($callback[0],$callback[1])){
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$post = new POST();
}
$girdi = 1;
call_user_func_array([new $callback[0],$callback[1]],array_values($data));
}else{
echo "Critical Error - Method Not Found";
exit;
}
}else {
echo "Critical Error - Class Not Found";
exit;
}
}else {
echo "Critical Error - File Not Found";
exit;
}
}else {
echo "Access Denied - Invalid method";
exit;
}
endif;
}
if ($girdi !== 1) {
die("404 - not found");
}
}
function Actions() {
print_r(self::$routes);
}
}
Şimdiden teşekkürler.