我有一个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();
}
}
}
答案 0 :(得分:2)
使用post并获取类方法是完全可行的。有经验的开发人员对你的代码跳出的更有可能是两件事: 1.缺乏输入验证 2.将用户输入直接转储到页面的输出中(人们只能希望你在进入数据库的过程中没有做类似的事情)。
如果您对使用框架不感兴趣,可以手动执行这些操作。 但是,有无数可靠的PHP框架可以为您引导RESTful请求,将其抽象为对象,丰富的输入验证等。
答案 1 :(得分:0)
这是“好的”,从某种意义上来说它会起作用,但不应该这样做。
这是一个简单的解决方案。而是将名称作为参数添加到寄存器方法中。
简化版......
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%透明。幕后没有秘密发生。