Manage URL routes in own php framework

前端 未结 12 2160
盖世英雄少女心
盖世英雄少女心 2021-02-02 16:34

I\'m creating a PHP Framework and I have some doubts...

The framework takes the url in this way: http:/web.com/site/index

It takes the first paramet

12条回答
  •  时光取名叫无心
    2021-02-02 17:24

    This is how i implemented loader.php

       createUrl());
            if(!empty($folder) && trim($folder['path'],DIRECTORY_SEPARATOR)!='')
             {
                $temp_path  = explode(DIRECTORY_SEPARATOR,trim($parse_res['path'],DIRECTORY_SEPARATOR));
                $folder_path    = explode(DIRECTORY_SEPARATOR,trim($folder['path'],DIRECTORY_SEPARATOR));
                $temp_path      = array_diff($temp_path,$folder_path);
    
                    if(empty($temp_path))
                    {
                        $temp_path =    '';
                    }
             }else
             {
                if(trim($parse_res['path'],DIRECTORY_SEPARATOR)!='')
                {
                 $temp_path = explode(DIRECTORY_SEPARATOR,trim($parse_res['path'],DIRECTORY_SEPARATOR));
                }
                     else
                 $temp_path ='';
             }
            if(is_array($temp_path))
            {   
                if(count($temp_path) ==1)
                {
                    array_push($temp_path,'index');
                }
                foreach($temp_path as $pathname)
                {   
                    $this->request .= $pathname.':';
                }
            }
            else $this->request = 'index'.':'.'index';
    
        }
    
     private function createUrl()
     {  
        $pageURL  = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        return $pageURL;
     }
     public function autolLoad()
     {
        if($this->request) 
        {   
            $parsedPath = explode(':',rtrim($this->request,':'));
            if(is_file(APPLICATION_PATH.DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.$parsedPath[0].'_controller'.'.php'))
            {
                include_once(APPLICATION_PATH.DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.$parsedPath[0].'_controller'.'.php');
                if(class_exists($parsedPath[0].'_controller'))
                {
                    $class  = $parsedPath[0].'_controller';
                    $obj    = new $class();
                    //$config       = new config('localhost','Winkstore','nCdyQyEdqDbBFpay','mawinkcms');
                    //$connect  =  connectdb::getinstance();
                    //$connect->setConfig($config);
                    //$connection_obj = $connect->connect();
                    //$db               = $connect->getconnection();//mysql link object
                    //$obj->setDb($db);
                    $method = $parsedPath[1];
                    if(method_exists ($obj ,$parsedPath[1] ))
                    {
                        $obj->$method();
                    }else die('class method '.$method.' not defined');
    
                }else die('class '.$parsedPath[0]. ' has not been defined' );
    
            } else die('controller not found plz define one b4 u proceed'.APPLICATION_PATH.DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.$parsedPath[0].'.php');
    
         }else{ die('oops request not set,i know tis is not the correct way to error :)'); }
     }
    
    }
    

    Now in my index file

    //include_once('config.php');
    include_once('connectdb.php');
    require_once('../../../includes/db_connect.php');
    include_once('view.php');
    include_once('abstractController.php');
    include_once('controller.php');
    include_once('loader.php');
    $loader = new loader(array('path'=>DIRECTORY_SEPARATOR.'magsonwink'.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.'admin'.DIRECTORY_SEPARATOR.'atom'.DIRECTORY_SEPARATOR));
    $loader->autolLoad();
    

    I haven't used the concept of modules.only controller action and view are rendered.

提交回复
热议问题