|
|
|
| Добрый вечер. Может кто сталкивался с передачей неопределенного количества параметров не определенному методу.
<?php
class Router{
...........
function run(){
.......
$segments = explode('/', $this->getURIRoute());
// Первый сегмент — контроллер.
$component = ucfirst(array_shift($segments));
$controller = $component.'Controller';
// Второй — действие.
$action = 'action'.ucfirst(array_shift($segments));
// Остальные сегменты — параметры.
$parameters = $segments;
$parameters['test']='bla';
.........
//Создаем отражение
$rc = new ReflectionClass($controller);
//передаем параметры
$class = $rc->newInstanceArgs($parameters);
//Вызываем действие
$blocks = $class->$action();
return $blocks;
........
}
}
?>
|
в контроллере пытаюсь получить данные
<?
class ContentController{
public $args = array();
public function __construct(){
$this->args = func_get_args();
var_dump($this->args);die();
}
public function actionMain(){
return 'Вот этот текст';
}
}
|
но вот беда, потерялись ключи у параметров. Сами значения я получил, но ключей тю-тю. Ассоциативный массив конвертировался в обычный.
Возможно ли как-то передать не просто значения, а с ключами?
вместо отражения пробовал
<?php
call_user_func_array(array($controller, $action), $parameters);
|
Но тоже самое. видно сама функция func_get_args не заточена под ассоциативные массивы. Есть ли альтернатива? или же придется другой способ реализации искать? (конструктору передавать параметр в виде массива). | |
|
|
|
|
|
|
|
для: speedsoft
(25.06.2012 в 21:40)
| | нашел еще одно решение
<?php
$parameters[]=array('test'=>'bla');
|
и потом проверять, если параметр массив, то разобрать его значение. Но это все костыли, так что проблема актуальна | |
|
|
|