رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در روتر mvc
#1
با عرض سلام و خسته نباشید خدمت شما دوستان گرامی
دوستان بنده این روتینگ رو نوشتم ولی الان یه امکان جدید میخام بهش اضافه بشه هرکاری میکنم نمیتونم
میخام که اگر یک فایل  کنترلر وجود نداشت بررسی کنه که پوشه ای با همون نام ارسال وجود داره یا خیر اگر وجود داشتپارامتر های بعد از اون رو به عنوان کنترلر متد و پارامتر در نظر بگیره مثلا
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;

       }


}


?>
پاسخ
تشکر شده توسط:
#2
اینو تست کنین:
<?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';
    } 
}
 
?>
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان