本文共 3158 字,大约阅读时间需要 10 分钟。
在开发过程中,路由和配置是构建高效Web应用的核心环节。本文将从路由的基本原理到配置的实现,逐步带你了解如何优化你的项目架构。
路由是Web应用中将URL映射到具体的资源(如控制器、方法等)的桥梁。在我们的项目中,我们可以通过自定义路由类来实现URL到逻辑的映射。
在项目根目录下,创建config/conf.php文件,配置默认的模块、控制器和方法:
// config/conf.phpreturn [ 'url_route' => 'PATH_INFO', 'modules' => 'core', 'controller' => 'IndexController', 'action' => 'index'];
在.htaccess文件中启用Nginx的重写功能:
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . index.php 在lib目录下创建Route.php,实现路由分发功能:
// core/lib/Route.phpnamespace core\lib;use Noodlehaus\Config;class Route{ private $conf; public function __construct() { $this->conf = new Config(YIN_PATH . '/config/conf.php'); } public function dispatcher() { switch ($this->conf->get('url_route')) { case 'PATH_INFO': $request = $this->getRequest('PATH_INFO'); break; default: $request = $this->getRequest(); break; } return $request; } private function getRequest($pathInfo = "") { $pathInfo = trim($_SERVER["REQUEST_URI"], "/"); $parm = explode('/', $pathInfo); if (trim($_SERVER["DOCUMENT_URI"], "/") == "index.php") { $this->modules = isset($parm[1]) ? $parm[1] : $this->conf->get('modules'); $this->controller = isset($parm[2]) ? $parm[2] : $this->conf->get('controller'); $this->action = isset($parm[3]) ? $parm[3] : $this->conf->get('action'); } else { $this->modules = isset($parm[0]) ? $parm[0] : $this->conf->get('modules'); $this->controller = isset($parm[1]) ? $parm[1] : $this->conf->get('controller'); $this->action = isset($parm[2]) ? $parm[2] : $this->conf->get('action'); } return [ "modules" => $this->modules, "controller" => $this->controller, "action" => $this->action ]; }} 创建/home/controller目录,并在controller目录下添加IndexController.php:
// home/controller/Controller.phpnamespace core\controller;class IndexController{ public function index() { echo "欢迎访问我们的网站!"; }} 在gzy核心入口中定义run方法:
// core/gzy.phpnamespace core;use core\lib\Route;class Gzy{ public static function run() { $route = new Route(); $request = $route->dispatcher(); $modules = $request['modules']; $controller = $request['controller']; $action = $request['action']; try { $class = $modules . '\\' . $controller . 'Controller'; $instance = new $class(); $method = $action; $instance->$method(); } catch (\Exception $e) { echo "系统错误:" . $e->getMessage(); } }} 通过GET请求参数或PATH_INFO方式访问:
http://localhost?g=core&c=IndexController&a=index http://localhost/index.php
在config/conf.php中设置url_route为'PATH_INFO',以支持路径信息模式:
'url_route' => 'PATH_INFO'
通过以上配置和实现,你已经掌握了路由和配置的核心知识。路由的灵魂在于将URL映射到具体的控制器和方法,而配置则为路由提供必要的支持。理解这些基础知识是构建高效Web应用的关键。
转载地址:http://iscp.baihongyu.com/