ZF2 передать несколько аргументов в динамическом вызове помощника

Я пытаюсь написать помощник вида, который динамически вызывает других помощников, и у меня возникают проблемы с передачей более одного аргумента. Следующий сценарий будет работать:

$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 и ничего с другими аргументами.

Я не хочу посылать несколько аргументов при вызове помощника, потому что разные помощники принимают разное количество аргументов. Я не хочу, чтобы мои помощники принимали аргументы в виде массива, потому что код в остальной части проекта вызывает помощников с осторожными аргументами.

0

Решение

Твоя проблема в том, что звонишь

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

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

будет интерпретироваться как

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

поэтому вы вызываете метод только с первым параметром.


Для достижения ожидаемого результата посмотрите функцию php call_user_func_array,
http://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);
2

Другие решения

Для вашего случая вы можете использовать функция php 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);
1

Если вы используете php> = 5.6, вы можете использовать функцию variadic вместо 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);
?>
0
По вопросам рекламы [email protected]