像 CodeIgniter 这样的框架确实有这个:
public function index($arg1, $arg2) {
echo $arg1;
}
其中 $arg1, $arg2 类似于。index.php/controller/index/arg1/arg2。
我想知道这在墙后面是如何工作的?这些框架中的代码就像丛林。我迷路了。
像 CodeIgniter 这样的框架确实有这个:
public function index($arg1, $arg2) {
echo $arg1;
}
其中 $arg1, $arg2 类似于。index.php/controller/index/arg1/arg2。
我想知道这在墙后面是如何工作的?这些框架中的代码就像丛林。我迷路了。
好吧,您需要配置您的 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 !!!!!!)。