You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP应用中如何让AltoRouter路由与控制器配合实现MVC架构

AltoRouter 适配MVC架构实现方案

核心实现逻辑:将路由目标从直接加载视图的闭包,改为指向控制器对应方法,请求匹配后先调用控制器完成业务逻辑处理,再由控制器加载视图返回,即可完成路由与MVC架构的适配。


修复现有代码问题

先修正现有控制器代码的语法错误和逻辑问题:

  1. 引入模型语句末尾缺失分号
  2. 实例化控制器语句末尾缺失分号
  3. 移除控制器文件底部的自动实例化逻辑,避免文件被引入时直接执行业务,交由路由层统一调度
  4. 不要在构造函数中直接调用业务方法,拆分独立的动作方法对应不同路由

修正后的控制器示例(建议存放路径app/Controllers/HomeController.php):

<?php
// 引入对应模型类
require __DIR__ . '/../Models/Home.php';

class HomeController
{
    /**
     * 首页业务逻辑
     */
    public function index()
    {
        // 调用模型层处理业务、获取数据
        $homeModel = new Home();
        $pageData = $homeModel->getData(); // 示例:从模型取首页渲染需要的数据

        // 业务处理完成后,加载视图并传入数据
        require __DIR__ . '/../../views/home.php';
    }

    /**
     * 404页面逻辑
     */
    public function notFound()
    {
        require __DIR__ . '/../../views/error404.php';
    }
}

修改路由配置与调度逻辑

AltoRouter原生支持控制器类名#方法名格式的字符串作为路由目标,无需为每个路由写闭包。修改入口文件index.php代码:

<?php
require 'vendor/altorouter/altorouter/AltoRouter.php';
// 引入控制器类,后续可接入Composer PSR-4自动加载替代手动引入
require __DIR__ . '/app/Controllers/HomeController.php';

$router = new AltoRouter();

// 路由映射规则:请求方式, 请求路径, 路由目标(控制器#方法), 路由别名(可选)
$router->map('GET', '/', 'HomeController#index', 'home');
$router->map('GET', '/error404', 'HomeController#notFound', 'error404');

// 匹配当前请求
$match = $router->match();

// 路由调度
if (is_array($match)) {
    list($controllerName, $method) = explode('#', $match['target']);
    // 校验类和方法是否存在
    if (class_exists($controllerName) && method_exists($controllerName, $method)) {
        $controller = new $controllerName();
        call_user_func_array([$controller, $method], $match['params']);
        exit;
    }
}

// 无匹配路由跳转404
header('Location: /error404');
exit;

你现有的.htaccess规则不需要修改,可以直接复用。

最终请求流转流程

整套MVC架构的执行链路如下:

  • 用户发起请求,.htaccess将非静态资源请求统一转发到index.php入口文件
  • AltoRouter匹配当前请求对应的控制器与方法
  • 路由调度层实例化控制器,调用对应方法,传入路由参数
  • 控制器接收参数,调用模型层完成数据处理、业务逻辑
  • 控制器将处理完成的数据传递给视图,加载视图文件渲染内容
  • 最终将渲染完成的响应返回给用户

优化建议

  • 接入Composer的PSR-4自动加载能力,无需手动require各类文件,提升可维护性
  • 控制器层只负责参数校验、调度模型、传递数据到视图,不要直接写SQL或核心业务逻辑,数据操作统一收敛到模型层
  • 视图层只负责数据展示,不要嵌入业务处理代码

内容的提问来源于stack exchange,提问作者Rémi LCD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:12:14