0

像 CodeIgniter 这样的框架确实有这个:

public function index($arg1, $arg2) {
    echo $arg1;
}

其中 $arg1, $arg2 类似于。index.php/controller/index/arg1/arg2。

我想知道这在墙后面是如何工作的?这些框架中的代码就像丛林。我迷路了。

4

1 回答 1

0

好吧,您需要配置您的 Web 服务器(Apache 左右),以便为所有请求(uri)执行相同的 PHP(也称为前端控制器)。

然后,在您的前端控制器中,您需要解析 uri(http://php.net/manual/es/reserved.variables.server.php)并使其匹配您的路由规则之一(例如使用正则表达式) .

看看https://github.com/symfony/Routing(或阅读查理的评论)。

index.php/controller/index/arg1/arg2的情况下,您不需要配置 Web 服务器(只需获取PATH_INFO):

<?php

class Controller {

    public function indexAction($a, $b) {

        return "$a & $b";

    }
}

$path = trim($_SERVER['PATH_INFO'], '/');
$parts = explode('/', $path);
$controllerName = ucfirst($parts[0]);
$actionName = $parts[1] . 'Action';

$controller = new $controllerName();

echo $controller->$actionName($parts[2], $parts[3]);

显然这个例子太基础了。还有更多的东西,比如路由定义、方法反射来获取方法参数的名称等等,所以请进入源代码一些不错的框架(比如 Symfony2 !!!!!!)。

于 2013-05-11T15:51:41.430 回答