تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل در روتر mvc
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با عرض سلام و خسته نباشید خدمت شما دوستان گرامی
دوستان بنده این روتینگ رو نوشتم ولی الان یه امکان جدید میخام بهش اضافه بشه هرکاری میکنم نمیتونم
میخام که اگر یک فایل  کنترلر وجود نداشت بررسی کنه که پوشه ای با همون نام ارسال وجود داره یا خیر اگر وجود داشتپارامتر های بعد از اون رو به عنوان کنترلر متد و پارامتر در نظر بگیره مثلا
localhost/test/post/new/1
مثلا ببینه اگر کنترلر test  تویه همون پوشه کنترلر هام وجود  نداشت بررسیکنه که پوشش هست یا خی  اگر پوشش وجود داشت  این ها بشن به ترتیب کنتلر و متد و..
post کنترلر
new متد
1 پارامتر

فایل روترم :
<?php

function ruter()
{
   global $config;

   $controller = $config['default_controller'];
   $method = $config['default_method'];
   $paramss = array();
   if (isset($_GET['url'])) {
       $link = explode('/', $_GET['url']);
       $controller = $link[0];
       switch ($controller) {
           case 'page':
               if (is_numeric($link[1])) {
                   $controller = 'main';
                   $method = 'page';
                   array_shift($link);
                   $paramss = (isset($link[0]) ? $link : $paramss);
               } else {
                   $controller = 'page';
                   $method = 'index';
                   array_shift($link);
                   $paramss = (isset($link[0]) ? $link : $paramss);
               }
               break;
           case 'admin':
           case 'modir':
               $controller = 'admin-test';
               array_shift($link);
               $method = (isset($link[0]) ? $link[0] : $method);
               array_shift($link);
               $paramss = (isset($link[0]) ? $link : $paramss);
                break;
           default:
               array_shift($link);
               $method = (isset($link[0]) ? $link[0] : $method);
               array_shift($link);
               $paramss = (isset($link[0]) ? $link : $paramss);
               break;
       }

   }
   if (method_exists($controller, $method)) {
       $obj = new $controller;
       call_user_func_array(array($obj, $method), $paramss);
   } else {
       $controller = $config['error_controller'];
       require_once(APP_DIR . 'controllers/' . $controller . '.php');
       $method = 'index';
   }

}

?>



فایل آوتولود
<?php
function __autoload($className)
{
        $path = APP_DIR . 'controllers/' . $className . '.php';
       if (file_exists($path)) {
           require_once $path;

       }
       else if(file_exists(APP_DIR.'class/'.$className.'.php')) {
           $path =APP_DIR.'class/'.$className.'.php';
           require $path;
       }
       else {
           $path = APP_DIR . 'controllers/error.php';
           require $path;

       }


}


?>
اینو تست کنین:
<?php
 
function ruter() {
    global $config;
    $controllerList = array('page', 'admin', 'modir'); 
    $controller = $config['default_controller'];
    $method = $config['default_method'];
    $paramss = array();
    if (isset($_GET['url'])) {
        $link = explode('/', $_GET['url']);
        $controller = $link[0];
        if (!in_array($controller, $controllerList)) {
            $path = array_shift($link);
            $link = array_values($link);
            $controller = $link[0];
            $path = APP_DIR . 'controllers/' . $path . $controller . '.php';
            if (file_exists($path)) {
                require_once $path;
            } else {
                exit ('Controller not found.');
            }
        }
        switch ($controller) {
            case 'page':
                if (is_numeric($link[1])) {
                    $controller = 'main';
                    $method = 'page';
                    array_shift($link);
                    $paramss = (isset($link[0]) ? $link : $paramss);
                } else {
                    $controller = 'page';
                    $method = 'index';
                    array_shift($link);
                    $paramss = (isset($link[0]) ? $link : $paramss);
                }
                break;
            case 'admin':
            case 'modir':
                $controller = 'admin-test';
                array_shift($link);
                $method = (isset($link[0]) ? $link[0] : $method);
                array_shift($link);
                $paramss = (isset($link[0]) ? $link : $paramss);
                    break;
            default:
                array_shift($link);
                $method = (isset($link[0]) ? $link[0] : $method);
                array_shift($link);
                $paramss = (isset($link[0]) ? $link : $paramss);
                break;
        }
    }
    if (method_exists($controller, $method)) {
        $obj = new $controller;
        call_user_func_array(array($obj, $method), $paramss);
    } else {
        $controller = $config['error_controller'];
        require_once(APP_DIR . 'controllers/' . $controller . '.php');
        $method = 'index';
    } 
}
 
?>