【问题标题】:How to write a controller that sends an array as a URL parameter?如何编写一个将数组作为 URL 参数发送的控制器?
【发布时间】:2014-11-23 18:36:54
【问题描述】:

在某些 MVC 平台中,控制器方法接受 URL 的内容作为正斜杠分隔的元素列表,作为参数接收,例如

 site.com/controller/method/var1/var2

有关联的控制器:

class Controller

  function method(var1, var2){
  }
}

但是我怎样才能实现这种编码呢?我希望从一个数组开始并将参数化列表发送到一个函数,即

$args = array("one"=>"cheese","two"=>"eggs");

php_function("myfunction",$args);

myfunction 内,我会拥有

function myfunction($one, $two){
}

我知道func_get_args 接受未知数量的参数。 user_call_func 很有用,除了

user_call_func("myfunction",$args);

...导致第一个参数包含参数数组,与从函数内调用的func_get_args 没有区别。

extract 也不起作用,因为我需要将数组作为函数内部的变量接收。

【问题讨论】:

  • 你是问网址怎么排,还是怎么读?对于前者,我希望site.com/controller/myfunction/cheese,eggs 会这样做。如果您打算编写自己的路由系统,我建议您不要打扰 - 目前有很多,并且重新发明轮子没有任何价值。 Slim 框架非常好,我希望 Zend 和 Symfony 有自己的模块,您可以单独使用。

标签: php arrays parameter-passing


【解决方案1】:

call_user_func_array 接受方法描述和参数数组,并返回调用函数的结果。我认为它会按顺序从数组中获取参数,而不是按名称。在使用它之前,您应该以正确的顺序组装一个参数数组,并可能验证缺少的参数。

【讨论】:

  • 谢谢。这是正确的,但马修 A 展示了一个完整的例子,所以我给他打了绿勾。
【解决方案2】:

我已经成功创建了您想要的以下内容。

class BootStrap {

private $controller = 'NameOfIle.php';
private $method = 'function()';
private $params = array('sdfds' => 'dsfdsf', 'sdfdsfsdfdsfsd' => 'sdfdsfds');


public function __construct() {
  call_user_func_array(array($this->controller, $this->method), $this->params);
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2018-08-17
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多