1

我有一个 php 类,RegistrationController,

<?php
 class RegistrationController  extends ParentController {

    function __construct() {
        parent::__construct();
        echo 'We are inside RegistrationController';
    }

    public function register() {
        $name = $_GET['name'];
        echo "<li> We will register soon, $name </li>";
    }
 }
?>

我正在通过这样的 URL 访问注册方法,[仅供参考,我在 .htaccess 中使用 RewriteEngine]

http://localhost:8888/Service/RegistrationController/register?name=Owl

问题

现在,一切正常,我只需要确保我的查询?name=Owl在我请求一些计算时设置了这些变量。

Web 服务将无法从 Web 浏览器访问,这只是我想为我的移动应用程序制作的一项微不足道的服务。应用程序将按原样调用此 URL,除了详细信息 (var) 之外没有任何更改。

那么,在类的函数中可以使用 $_GET 或 $_POST 吗?它是可扩展的还是可维护的?


附加信息

我以非常通用的方式调用不同控制器的方法,所以在我的 Bottstrap 中,我只是调用这个函数,它让我可以用几行代码调用任何控制器的方法。

private function handleMethodCallOn($controller, $url) {
        //check if the URL has specified any method to call
        if(isset($url[1])) {//URL has been exploded earlier to get content
            if(method_exists($controller, $url[1])) {
                $controller->{$url[1]}();//HERE I am calling any function
            } else {
                $error = new error_404();
            }   
        }
    }
4

2 回答 2

2

使用 post 并进入类方法是完全可行的。经验丰富的开发人员对您的代码的反应更可能是两件事:1. 缺乏输入验证 2. 将用户输入直接转储到页面的输出中(只能希望您在进入页面的过程中没有做类似的事情数据库)。

如果您对使用框架不感兴趣,您可以手动执行这些操作。但是,有无数可靠的 PHP 框架可以为您引导 RESTful 请求,将其抽象为一个对象,丰富的输入验证等。

于 2012-06-17T01:21:38.170 回答
0

这是“好的”,从某种意义上说它会起作用,但不应该这样做。

这是一个简单的修复。而是将名称作为参数添加到 register 方法。

简化版...

class RegistrationController  extends ParentController {

    function __construct() {
        parent::__construct();
        echo 'We are inside RegistrationController';
    }

    public function register( $name ) {
        echo "<li> We will register soon, $name </li>";
    }
}

$registration_controller->register( $_GET['name'] )

这使得代码 100% 透明。幕后没有秘密发生。

于 2012-06-17T01:23:50.690 回答