Разбирать переменные из массива в метод - PullRequest
2 голосов
/ 01 апреля 2012

Я пытаюсь создать свою собственную маленькую систему MVC, она работает очень хорошо, но у меня проблемы с анализом переменных в методах.

Вы видите, что я использую переписывание URL, чтобы каждый URL указывал на index.php, а затем настраивал страницу по данным URL, таким как / email / 1/34 /

Затем я создаю объект, такой как здесь.

<?php 
$page = $urlsplit[0];

$variables = array($urlsplit[1], $urlsplit[2]);
$page->callmethod($variables);
?>

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

$page->callmethod($variables[0], $variables[1]);

Есть идеи, как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

Для совершения звонка, например $page->callmethod($variables[0], $variables[1]), вы можете использовать call_user_func_array:

call_user_func_array(array($page, 'callmethod'), $variables);
0 голосов
/ 01 апреля 2012

На самом деле, было бы более целесообразно использовать какое-то регулярное выражение для разделения URL на несколько частей.

Рассмотрим этот фрагмент:

/*
$url = '/user/4/edit'; // from $_GET
*/
$pattern = '/(?P<controller>[a-z]+)(:?\/(?:(?P<id>[0-9]+)\/)?(?P<action>[a-z]+))?/';
if ( !preg_match( $pattern, $url, $segments ) )
{
    // pattern did not match
}

$controller = new $segments['controller'];
if ( method_exists( $controller, $segments['action'] ) )
{
    $action = $segments['action'];
    $param =  $segments['id'];
}
else
{
    $controller = new ErrorController;
    $action = 'notFound';
    $param = $url;
}

$response = $controller->$action( $param );

Конечно, в реальной реализации MVC будут происходить дополнительные вещи, но это должно объяснить концепцию.

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