zf2在动态助手调用中传递多个参数

时间:2015-11-18 22:45:46

标签: php zend-framework2 view-helpers viewhelper

我正在尝试编写一个动态调用其他助手的视图助手,而且我无法传递多个参数。以下方案将起作用:

$helperName = "foo";
$args = "apples";

$helperResult = $this->view->$helperName($args);

但是,我想做这样的事情:

$helperName = "bar";
$args = "apples, bananas, oranges";

$helperResult = $this->view->$helperName($args);

用这个:

class bar extends AbstractHelper
{
    public function __invoke($arg1, $arg2, $arg) 
    {
        ...

但是它将"apples, bananas, oranges"传递给$arg1而没有传递给其他参数。

当我调用助手时,我不想发送多个参数,因为不同的助手会使用不同数量的参数。我不想编写我的帮助程序来将参数作为一个数组,因为整个项目其余部分的代码都会使用谨慎的参数调用帮助程序。

3 个答案:

答案 0 :(得分:2)

你的问题是打电话

$helperName = "bar";
$args = "apples, bananas, oranges";

$helperResult = $this->view->$helperName($args);

将被解释为

$helperResult = $this->view->bar("apples, bananas, oranges");

所以你只用第一个参数调用方法。

要获得预期的结果,请查看php函数call_user_func_arrayhttp://php.net/manual/en/function.call-user-func-array.php

示例

$args = array('apple', 'bananas', 'oranges');
$helperResult = call_user_func_array(array($this->view, $helperName), $args);

答案 1 :(得分:1)

对于您的情况,您可以使用the php function call_user_func_array,因为您的帮助程序是可调用的,并且您希望传递参数数组。

// Define the callable
$helper = array($this->view, $helperName);

// Call function with callable and array of arguments
call_user_func_array($helper, $args);

答案 2 :(得分:0)

如果使用php> = 5.6,则可以使用实现变量函数而不是使用func_get_args()。

示例:

<?php
function f($req, $opt = null, ...$params) {
    // $params is an array containing the remaining arguments.
    printf('$req: %d; $opt: %d; number of params: %d'."\n",
           $req, $opt, count($params));
}

f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);
?>