Неожиданное поведение в PHP Altorouter при передаче параметров
Настроить
Я получаю доступ к этому URL: <host>/render/z63034/RBLR/GLZB
,
Мой шаблон URL таков: /render/[a:title]/[a:bpFrom]/[a:bpTo]
,
Мой маршрут добавляется так:
$router->map("GET", "/render/[a:title]/[a:bpFrom]/[a:bpTo]", function ($params) { include __DIR__ . "/views/render.php"; }, "render");
Затем вызов выглядит так:
call_user_func_array($match['target'], $match['params']);
В моем index.php
(где все запросы направляются) var_dump()
из $match['params']
дает ожидаемое:
array(3) {
["title"]=>
string(6) "z63034"
["bpFrom"]=>
string(4) "RBLR"
["bpTo"]=>
string(4) "GLZB"
}
В моем render.php
(который включен) var_dump()
из $params
дает неожиданное
string(6) "z63034"
Вопрос
Почему только первый элемент в массиве я передаю call_user_func_array
фактически передается (не как массив, а как само значение)?
1 ответ
Заметить, что call_user_func_array
проходит $params
в качестве отдельных параметров, я имею в виду, что в определении вашей функции вы должны объявить столько же параметров, сколько $params
массив имеет.
Например, если вы называете это:
$params = array('Hello', 'World');
call_user_func_array(array($this,'test'), $params);
И ваше определение функции выглядит так
function test($a){
echo $a;
echo $b;
echo '<br>';
}
вы напечатаете только "Hello", поэтому вы должны объявить свою функцию следующим образом
function test($a, $b){
echo $a;
echo $b;
echo '<br>';
}
надеюсь, это поможет