Setup
I'm accessing this url: <host>/render/z63034/RBLR/GLZB
.
My url pattern is as such: /render/[a:title]/[a:bpFrom]/[a:bpTo]
.
My route gets added like so:
$router->map("GET", "/render/[a:title]/[a:bpFrom]/[a:bpTo]", function ($params) { include __DIR__ . "/views/render.php"; }, "render");
The call then looks like this:
call_user_func_array($match['target'], $match['params']);
In my index.php
(where all requests are routed to) a var_dump()
of $match['params']
yields the expected:
array(3) {
["title"]=>
string(6) "z63034"
["bpFrom"]=>
string(4) "RBLR"
["bpTo"]=>
string(4) "GLZB"
}
In my render.php
(which is included) a var_dump()
of $params
yields the unexpected
string(6) "z63034"
Question
Why is only the first element in the array I'm passing to call_user_func_array
actually passed (not as an array, but just as the value itself)?
Notice that call_user_func_array
passes the $params
as single parameters, with this I mean, that in your function definition, you have to declare as much parameters as your $params
array has.
For example if you call this:
$params = array('Hello', 'World');
call_user_func_array(array($this,'test'), $params);
And your function definition looks like that
function test($a){
echo $a;
echo $b;
echo '<br>';
}
you will only print 'Hello', so you have to declare your function like this
function test($a, $b){
echo $a;
echo $b;
echo '<br>';
}
Hope that helps