国产综合精品在线,精品一区国产精品,中文在线欧美日韩视频,中文字幕制服亚洲另类

<dfn id="ykamo"><pre id="ykamo"></pre></dfn>
  • <rt id="ykamo"><code id="ykamo"></code></rt>
  • <strike id="ykamo"></strike>
    PHP實現(xiàn)路由映射到指定控制器
    來源:易賢網(wǎng) 閱讀:1192 次 日期:2016-08-29 14:29:38
    溫馨提示:易賢網(wǎng)小編為您整理了“PHP實現(xiàn)路由映射到指定控制器”,方便廣大網(wǎng)友查閱!

    自定義路由的功能,指定到pathinfo的url上,再次升級之前的腳本 

    SimpleLoader.php

    <?php

    class SimpleLoader{

     public static function run($rules=array()){

     header("content-type:text/html;charset=utf-8");

     self::register();

     self::commandLine();

     self::router($rules);

     self::pathInfo();

     }

     //自動加載

     public static function loadClass($class){

     $class=str_replace('\\', '/', $class);

     $dir=str_replace('\\', '/', __DIR__);

     $class=$dir."/".$class.".php";

     if(!file_exists($class)){

      header("HTTP/1.1 404 Not Found");

     }

     require_once $class; 

     }

     //命令行模式

     public static function commandLine(){

     if(php_sapi_name()=="cli"){

      $_SERVER['PATH_INFO']="";

      foreach ($_SERVER['argv'] as $k=>$v) {

      if($k==0) continue;

      $_SERVER['PATH_INFO'].="/".$v;

      }

     }

     }

     //路由模式

     public static function router($rules){

     if(isset($_SERVER['PATH_INFO']) && !empty($rules)){

      $pathInfo=ltrim($_SERVER['PATH_INFO'],"/");

      foreach ($rules as $k=>$v) {

      $reg="/".$k."/i";

      if(preg_match($reg,$pathInfo)){

       $res=preg_replace($reg,$v,$pathInfo);

       $_SERVER['PATH_INFO']='/'.$res;

      }

      }

     }

     }

     //pathinfo處理

     public static function pathInfo(){

     if(isset($_SERVER['PATH_INFO'])){

      $pathinfo=array_filter(explode("/", $_SERVER['PATH_INFO']));

      for($i=1;$i<=count($pathinfo);$i++){

      $key=isset($pathinfo[$i]) ? $pathinfo[$i] : '';

      $value=isset($pathinfo[$i+1]) ? $pathinfo[$i+1] :"";

      switch ($i) {

       case 1:

       $_GET['m']=ucfirst($key);

       break;

       case 2:

       $_GET['c']=ucfirst($key);

       break;

       case 3:

       $_GET['a']=$key;

       break;

       default:

       if($i>3){

        if($i%2==0){

        $_GET[$key]=$value;

        }

       }

       break;

      }

      }

     }

     $_GET['m']=!empty($_GET['m']) ? ucfirst($_GET['m']) : 'Index';

     $_GET['c']=!empty($_GET['c']) ? ucfirst($_GET['c']) : 'Index';

     $_GET['a']=!empty($_GET['a']) ? $_GET['a'] : 'index';

     $class="\\Controller\\{$_GET['m']}\\{$_GET['c']}";

     $controller=new $class;

     if(method_exists($controller, $_GET['a'])){

      $controller=new $class;

      $controller->$_GET['a']();

     }else{

      header("HTTP/1.1 404 Not Found");

      echo "404";

     }

     }

     //致命錯誤回調(diào)

     public static function shutdownCallback(){

     $e=error_get_last();

     if(!$e) return;

     self::myErrorHandler($e['type'],'<font color="red">Fatal Error</font> '.$e['message'],$e['file'],$e['line']);

     }

     //錯誤處理

     protected static function myErrorHandler($errno,$errstr,$errfile,$errline){

     list($micseconds,$seconds)=explode(" ",microtime());

     $micseconds=round($micseconds*1000);

     $micseconds=strlen($micseconds)==1 ? '0'.$micseconds : $micseconds;

     if(php_sapi_name()=="cli"){

      $break="\r\n";

     }else{

      $break="<br/>";

     }

     $mes="[".date("Y-m-d H:i:s",$seconds).":{$micseconds}] ".$errfile." ".$errline." line ".$errstr.$break;

     echo $mes; 

     }

     //注冊

     public static function register(){

     error_reporting(0);

     set_error_handler(function($errno,$errstr,$errfile,$errline){

      self::myErrorHandler($errno,$errstr,$errfile,$errline);

     });

     register_shutdown_function(function(){

      self::shutdownCallback();

     });

     spl_autoload_register("self::loadClass");

     }

    如何使用

    index.php 

    <?php

    //路由映射

    $rules=array(

     '^user$'=>'User/User/getUserList',

     '^user\/(\d+)$'=>'User/User/getUserById/id/$1',

     '^user\/(\d+)\/article$'=>'User/User/getUserArticle/uid/$1'

    );

    require_once "SimpleLoader.php";

    SimpleLoader::run($rules); 

    控制器啥樣

    \Controller\User\User.php

    <?php

    namespace Controller\User;

    class User{

     public function getUserById(){

     echo "用戶信息id {$_GET['id']} 的信息";

     }

     public function getUserList(){

     echo "用戶列表";

     }

     public function getUserArticle(){

     echo "用戶id {$_GET['uid']} 的文章列表";

     }

    以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機網(wǎng)站地址:PHP實現(xiàn)路由映射到指定控制器

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)