通过控制器中的方法进行参数化

时间:2013-05-11 15:43:53

标签: php

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

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

其中$ arg1,$ arg2就像。的index.php /控制器/索引/ ARG1 / ARG2。

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

1 个答案:

答案 0 :(得分: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 !!!!)。